# Array.js **Repository Path**: long_ren/Array.js ## Basic Information - **Project Name**: Array.js - **Description**: Array.js帮助开发人员更优雅地操作Javascript数组。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 17 - **Created**: 2017-07-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Array.js **Array.js**帮助开发人员更优雅地操作Javascript数组。 ## 使用 直接引入 *Array.js* 或 *Array.min.js*: ~~~html ~~~ 然后在Javascript中使用: ~~~javascript var arr = [ 1, 2, 3, 4]; arr.$each(function (k, v) { console.log(v); }); ~~~ 其中`$each()`就是`Array.js`中定义的方法。 ### CDN地址 可以直接引入`http://liuxiangchao.oss-cn-shanghai.aliyuncs.com/Array.min.js?v=0.0.1`来使用`Array.js`。 ## API **注意** OSC的文档解析有问题,看示例时需要直接拉到当前网页的下方。 ### 增 * ` $pad(value, size)` - 填充数组 [\[示例\]](#pad) * ` $fill(value, length)` - 填充数组到一定长度 [\[示例\]](#fill) * ` $push(value1, value2, ...)` - 在尾部加入一个或多个元素 [\[示例\]](#push) * ` $pushAll(array2)` - 一次性加入多个元素 [\[示例\]](#pushall) * ` $insert(index, obj1, ...)` - 在指定位置插入新的元素 [\[示例\]](#insert) ### 删 * ` $removeValue(v)` - 从数组中删除某个值 [\[示例\]](#removevalue) * ` $remove(index)` - 从数组中删除某个位置上的值 [\[示例\]](#remove) * ` $removeIf(fn)` - 删除所有满足条件的元素 [\[示例\]](#removeif) * ` $keepIf(fn)` - 保留所有满足条件的元素,删除不满足条件的元素 [\[示例\]](#keepif) * ` $clear()` - 清空数组 [\[示例\]](#clear) ### 改 * ` $replace(newValues)` - 将当前数组的元素替换成新的数组中的元素 [\[示例\]](#replace) * ` $unique(fn)` - 去除数组中的相同数据 [\[示例\]](#unique) * ` $set(index, value)` - 设置某个索引位置上的值 [\[示例\]](#set) * ` $sort(compare)` - 对该数组进行正排序 [\[示例\]](#sort) * ` $rsort(compare)` - 对该数组进行倒排序 [\[示例\]](#rsort) * ` $asort(compare)` - 对该数组进行正排序,并返回排序后对应的索引 [\[示例\]](#asort) * ` $arsort(compare)` - 对该数组进行倒排序,并返回排序后对应的索引 [\[示例\]](#arsort) * ` $asc(field)` - 依据单个字段进行正排序 [\[示例\]](#asc) * ` $desc(field)` - 依据单个字段进行倒排序 [\[示例\]](#desc) * ` $swap(index1, index2)` - 交换数组的两个索引对应的值 [\[示例\]](#swap) * ` $shuffle()` - 打乱数组中元素顺序 [\[示例\]](#shuffle) ### 查 * ` $contains(v)` / ` $include(v)` - 判断数组中是否包含某个值 [\[示例\]](#contains) * ` $each(fn)` - 遍历数组 [\[示例\]](#each) * ` $get(index)` - 获取某个索引位置上的值 [\[示例\]](#get) * ` $getAll(index1, indexes1, ...)` - 获取一组索引对应的值 [\[示例\]](#getall) * ` $first()` - 取得第一个元素值 [\[示例\]](#first) * ` $last()` - 取得第一个元素值 [\[示例\]](#last) * ` $isEmpty()` - 判断数组是否为空 [\[示例\]](#isempty) * ` $all(fn)` - 对容器中元素应用迭代器,并判断是否全部返回真 [\[示例\]](#all) * ` $any(fn)` - 对容器中元素应用迭代器,并判断是否有一次返回真 [\[示例\]](#any) * ` $map(fn)` / `$collect(fn)` - 对容器中元素应用迭代器,并将每次执行的结果放入一新数组中 [\[示例\]](#map) * ` $reduce(fn)` - 对容器中元素应用迭代器,并将每次执行的结果放入到下一次迭代的参数中 [\[示例\]](#reduce) * ` $find(fn)` - 对容器中元素应用迭代器,只要有一次返回值即立即返回由当前元素 [\[示例\]](#find) * ` $findAll(fn)` / ` $filter(fn)` - 对容器中元素应用迭代器,将所有返回真的元素放入一数组中 [\[示例\]](#findall) * ` $reject(fn)` - 对容器中元素应用迭代器,将所有返回假的元素放入一数组中 [\[示例\]](#reject) * ` $grep(pattern)` - 找出匹配某正则表达式的元素,并放入一数组中 [\[示例\]](#grep) * ` $keys(value, strict)` / ` $indexesOf(value, strict)` - 取得某一个值在数组中出现的所有的键的集合 [\[示例\]](#indexesof) * ` $diff(array2)` - 取当前数组与另一数组的差集 [\[示例\]](#diff) * ` $intersect(array2)` - 取当前数组与另一数组的交集 [\[示例\]](#intersect) * ` $max(compare)` - 取得当前集合中最大的一个值 [\[示例\]](#max) * ` $min(compare)` - 取得当前集合中最小的一个值 [\[示例\]](#min) * ` $sum(fn)` - 计算数组中的所有元素的总和 [\[示例\]](#sum) * ` $product(fn)` - 计算数组中的所有元素的乘积 [\[示例\]](#product) * ` $rand(size)` - 随机截取数组片段 [\[示例\]](#rand) * ` $size()` / ` $count()` - 计算元素数量 [\[示例\]](#size) * ` $chunk(size = 1)` - 返回数组分成新多个片段的结果 [\[示例\]](#chunk) * ` $combine(array1, ...)` - 取得当前数组和其他数组组合之后的结果 [\[示例\]](#combine) * ` $equal(array2)` - 判断两个数组是否以同样的顺序包含同样的元素 [\[示例\]](#equal) * ` $loop(fn)` - 循环使用当前数组的元素来调用某个函数 [\[示例\]](#loop) * ` $asJSON(field)` - 取得当前数组转换为JSON格式的字符串 [\[示例\]](#asjson) ### 辅助 * ` $copy()` - 拷贝数组 [\[示例\]](#copy) * ` Array.$range(start, end, step)` - 从一个限定的范围数字或字符生成一个数组 [\[示例\]](#range) * ` Array.$isArray(obj)` - 判断一个对象是否为数组 [\[示例\]](#isarray) ## 迭代器 在参数中使用`fn`表示迭代器,每个迭代器接收两个参数:`k`(索引)、`v`(元素值),并且`this`指向数组本身: ~~~javascript var has = [1, 2, 3, 4].$any(function (k, v) { return v > 10; }); ~~~ ## 排序迭代器 在`$sort`、`$rsort`、`$min`、`$max`等需要排序的API中,参数中的`compare`表示迭代器,每个迭代器接收两个参数:`v1`(第一个值)、`v2`(第二个值),`this`指向数组本身: ~~~javascript var arr = [3, 2, 4, 1]; arr.$sort(function (v1, v2) { if (v1 > v2) { return 1 } if (v1 == v2) { return 0; } return -1; }); //现在 arr = [1, 2, 3, 4] ~~~ ## 文档 ### $pad * ` $pad(value, size)` - 用value填充数组,默认size为1 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$pad("a"); // arr => [1, 2, 3, "a"] ~~~ 示例代码2: ~~~javascript var arr = [1, 2, 3]; arr.$pad("a", 5); // arr => [1, 2, 3, "a", "a", "a", "a", "a"] ~~~ ### $fill * ` $fill(value, length)` - 填充数组到一定长度 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$fill("a", 5); // arr => [1, 2, 3, "a", "a"] ~~~ ### $push * ` $push(value1, value2, ...)` - 在尾部加入一个或多个元素 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$push(4); // arr => [1, 2, 3, 4] arr.$push(5, 6, 7, 8); // arr => [1, 2, 3, 4, 5, 6, 7, 8] ~~~ ### $pushAll * ` $pushAll(array2)` - 一次性加入多个元素 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$pushAll([4, 5, 6]); // arr => [1, 2, 3, 4, 5, 6] ~~~ ### $insert * ` $insert(index, obj1, ...)` - 在指定位置插入新的元素,`index`参数支持负值 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$insert(0, "a", "b", "c"); // arr => ["a", "b", "c", 1, 2, 3] ~~~ 示例代码2: ~~~javascript var arr = [1, 2, 3, 4, 5]; arr.$insert(2, "a", "b", "c"); // arr => [1, 2, "a", "b", "c", 3, 4, 5] ~~~ 示例代码3: ~~~javascript var arr = [1, 2, 3, 4, 5]; arr.$insert(-2, "a", "b", "c"); // => [1, 2, 3, 4, "a", "b", "c", 5] ~~~ ### $removeValue * ` $removeValue(v)` - 从数组中删除某个值 示例代码1: ~~~javascript var arr = [1, 2, 2, 3, 3, 3]; arr.$removeValue(2); // arr => [1, 3, 3, 3] ~~~ ### $remove * ` $remove(index)` - 从数组中删除某个位置上的值,index支持负值 示例代码1: ~~~javascript var arr = [1, 2, 3, 4, 5]; arr.$remove(2); // arr => [1, 2, 4, 5] ~~~ 示例代码2: ~~~javascript var arr = [1, 2, 3, 4, 5]; arr.$remove(-2); // arr => [1, 2, 3, 5] ~~~ ### $removeIf * ` $removeIf(fn)` - 删除所有满足条件的元素,并返回删除的元素的个数 示例代码1: ~~~javascript var arr = [ 1, 2, 3, 4, 5]; arr.$removeIf(function (k, v) { return (v >= 3); }); // arr => [1, 2] ~~~ 示例代码2: ~~~javascript var arr = [ 1, 2, 3, 4, 5]; arr.$removeIf(function (k, v) { return true; }); // arr => [] ~~~ ### $keepIf * ` $keepIf(fn)` - 保留所有满足条件的元素,删除不满足条件的元素,并返回删除的元素的个数 示例代码1: ~~~javascript var arr = [ 1, 2, 3, 4, 5]; arr.$keepIf(function (k, v) { return (v >= 3); }) // arr => [3, 4, 5] ~~~ ### $clear * ` $clear()` - 清空数组 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$clear(); // arr => [] ~~~ ### $replace * ` $replace(newValues)` - 将当前数组的元素替换成新的数组中的元素 示例代码1: ~~~javascript var arr = [ 1, 2, 3, 4, 5]; arr.$replace(); // arr => [1, 2, 3, 4, 5] arr.$replace([]); // arr => [] arr.$replace(["a", "b", "c"]); // arr => ["a", "b", "c"] ~~~ ### $unique * ` $unique(fn)` - 去除数组中的相同数据 示例代码1: ~~~javascript var arr = [1, 2, 2, 3, 3, 3]; arr.$unique(); // arr => [1, 2, 3] ~~~ 示例代码2: ~~~javascript var arr = [1, 1, 2, 2, 3, 3, 4, 4]; arr.$unique(function (k, v) { if (v >= 3) return 3; if (v <= 2) return 2; }); // 此时要比较的值变成[2, 2, 2, 2, 3, 3, 3, 3] // arr => [1, 3] ~~~ ### $set * ` $set(index, value)` - 设置某个索引位置上的值 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$set(1, "a"); // arr => [1, "a", 3] arr.$set(4, "a"); // arr不变,因为4已经超出数组长度 ~~~ ### $sort * ` $sort(compare)` - 对该数组进行正排序 示例代码1: ~~~javascript var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return (v1 - v2) ; }); //arr => [1, 2, 3, 4, 5] ~~~ 示例代码2(实现倒排序): ~~~javascript var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return -(v1 - v2) ; }); //arr => [5, 4, 3, 2, 1] ~~~ 示例代码3(实现随机排序): ~~~javascript var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return Math.random() - 0.5; }); //arr => [2, 4, 5, 1, 3] ~~~ ### $rsort * ` $rsort(compare)` - 对该数组进行倒排序 示例代码同`$sort(compare)`,只不过把顺序倒过来。 ### $asort * ` $asort(compare)` - 对该数组进行正排序,并返回排序后对应的索引 ### $arsort * ` $arsort(compare)` - 对该数组进行倒排序,并返回排序后对应的索引 ### $asc * ` $asc(field)` - 依据单个字段进行正排序 示例代码1: ~~~javascript var arr = [ { "name": "Libai", "age": 24 }, { "name": "Zhangsan", "age": 22 }, { "name": "Wanger", "age": 23 } ]; arr.$asc("age"); ~~~ 此时的`arr`变成: ~~~json [ { "name": "Zhangsan", "age": 22 }, { "name": "Wanger", "age": 23 }, { "name": "Libai", "age": 24 } ] ~~~ ### $desc * ` $desc(field)` - 依据单个字段进行倒排序 示例代码1: ~~~javascript var arr = [ { "name": "Libai", "age": 24 }, { "name": "Zhangsan", "age": 22 }, { "name": "Wanger", "age": 23 } ]; arr.$desc("age"); ~~~ 此时的`arr`变成: ~~~json [ { "name": "Libai", "age": 24 }, { "name": "Wanger", "age": 23 }, { "name": "Zhangsan", "age": 22 } ] ~~~ ### $swap * ` $swap(index1, index2)` - 交换数组的两个索引对应的值 示例代码1: ~~~javascript arr = [1, 2, 3]; arr.$swap(0, 2); // arr => [3, 2, 1] ~~~ ### $shuffle * ` $shuffle()` - 打乱数组中元素顺序 示例代码1: ~~~javascript var arr = [1, 2, 3]; arr.$shuffle(); // arr => [2, 3, 1] arr.$shuffle(); // arr => [1, 3, 2] ~~~ ### $contains * ` $contains(v)` - 判断数组中是否包含某个值 示例代码1: ~~~javascript [1, 2, 3].$contains(3); // => true [1, 2, 3].$contains(4); // => false [1, 2, 3].$contains(null); // => false ~~~ ### $include * ` $include(v)` - 同`$contains(v)`作用一致 ### $each * ` $each(fn)` - 遍历数组 示例代码1: ~~~javascript [1, 2, 3].$each(function (k, v) { console.log( "index:" + k + " v:" + v ); }); ~~~ 输出: ~~~ index:0 v:1 index:1 v:2 index:2 v:3 ~~~ ### $get * ` $get(index)` - 获取某个索引位置上的值 示例代码1: ~~~javascript [1, 2, 3].$get(0); // => 1 [1, 2, 3].$get(2); // => 3 [].$get(0); // => null ~~~ ### $getAll * ` $getAll(index1, indexes1, ...)` - 获取一组索引对应的值,如果超出索引范围,则不返回数据 示例代码1: ~~~javascript var arr = [1, 2, 3, 4, 5]; var newArr = arr.$getAll(); // newArr => [] newArr = arr.$getAll(0, 2, 4); // newArr => [1, 3, 5] newArr = arr.$getAll(0, 2, 4, 6, 8); // newArr => [1, 3, 5] 因为6和8超出索引范围 newArr = arr.$getAll(0, 2, [3, 4]); // newArr => [1, 3, 4, 5] ~~~ ### $first * ` $first()` - 取得第一个元素值 示例代码1: ~~~javascript [1, 2, 3].$first(); // => 1 [].$first(); // => null ~~~ ### $last * ` $last()` - 取得第一个元素值 示例代码1: ~~~javascript [1, 2, 3].$last(); // => 3 [].$last(); // => null ~~~ ### $isEmpty * ` $isEmpty()` - 判断数组是否为空 示例代码1: ~~~javascript [1, 2, 3].$isEmpty(); // => false [].$isEmpty(); // => true ~~~ ### $all * ` $all(fn)` - 对容器中元素应用迭代器,并判断是否全部返回真 示例代码1: ~~~javascript [1, 2, 3].$all(function (k, v) { return v > 1; }); // => false ~~~ 示例代码2: ~~~javascript [1, 2, 3].$all(function (k, v) { return v > 0; }); // => true ~~~ ### $any * ` $any(fn)` - 对容器中元素应用迭代器,并判断是否有一次返回真 示例代码1: ~~~javascript [1, 2, 3].$any(function (k, v) { return v > 3; }); // => false ~~~ 示例代码2: ~~~javascript [1, 2, 3, 4, 5].$any(function (k, v) { return v > 3; }); // => true ~~~ ### $map * ` $map(fn)` - 对容器中元素应用迭代器,并将每次执行的结果放入一新数组中 示例代码1: ~~~javascript [1, 2, 3].$map(function (k, v) { return v * v; }); // => [1, 4, 9] ~~~ 从v0.0.2起,可以使用Array.$nil来跳过某些不想返回的值: ~~~javascript [1, 2, 3].$map(function (k, v) { if (v == 2) {// 跳过值为2的元素 return Array.$nil; } return v * v; }); // => [1, 9] ~~~ ### $collect * `$collect(fn)` - 同`$map(fn)`作用一致 ### $reduce * ` $reduce(fn)` - 对容器中元素应用迭代器,并将每次执行的结果放入到下一次迭代的参数中 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$reduce(function (k, v, result) { return result + v; }); // => 15 ~~~ 示例代码2: ~~~javascript [1, 2, 3, 4, 5].$reduce(function (k, v, result) { if (result == 0) { result = 1; } return result * v; }); // => 120 ~~~ ### $find * ` $find(fn)` - 对容器中元素应用迭代器,只要有一次返回值即立即返回由当前元素 示例代码1: ~~~javascript [1, 2, 3].$find(); // => 1 取第一个 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$find(function (k, v) { return (v > 1); }); // => 2 ~~~ ### $findAll * ` $findAll(fn)` - 对容器中元素应用迭代器,将所有返回真的元素放入一数组 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$findAll(function (k, v) { return (v > 3); }); // => [4, 5] ~~~ ### $filter ` $filter(fn)` - 同`$findAll(fn)`作用一致 ### $reject * ` $reject(fn)` - 对容器中元素应用迭代器,将所有返回假的元素放入一数组中 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$reject(function (k, v) { return (v > 3); }); // => [1, 2, 3] ~~~ ### $grep * ` $grep(pattern)` - 找出匹配某正则表达式的元素,并放入一数组中 示例代码1: ~~~javascript ["a", "b", "c", 10, "11"].$grep(/\d+/); // => [10, "11"] ~~~ ### $keys * ` $keys(value, strict)` - 同`$indexesOf(value, strict)` ### $indexesOf * ` $indexesOf(value, strict)` - 取得某一个值在数组中出现的所有的键的集合 示例代码1: ~~~javascript [1, "2", 3].$indexesOf(2); // => [1] [1, "2", 3].$indexesOf(2, true); // => [] 因为"2"和2的数据类型不同 ~~~ ### $diff * ` $diff(array2)` - 取当前数组与另一数组的差集 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$diff([2, 3, 4, 6]); // => [1, 5] 注意"6"并不在其中 ~~~ ### $intersect * ` $intersect(array2)` - 取当前数组与另一数组的交集 示例代码1: ~~~javascript [1, 2, 3].$intersect([2, 3, 4]); // => [2, 3] ~~~ ### $max * ` $max(compare)` - 取得当前集合中最大的一个值 示例代码1: ~~~javascript [1, 2, 3].$max(); // => 3 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$max(function (v1, v2) { return v2 - v1; }); // => 1 ~~~ ### $min * ` $min(compare)` - 取得当前集合中最小的一个值 示例代码1: ~~~ [1, 2, 3].$min(); // => 1 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$min(function (v1, v2) { return v2 - v1; }); // => 3 ~~~ ### $sum * ` $sum(fn)` - 计算数组中的所有元素的总和 示例代码1: ~~~javascript [1, 2, 3].$sum(); // => 6 [1, 2, 3, 4].$sum(); // => 10 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$sum(function (k, v) { return v * v; }); // => 14 // 相当于:(1 * 1) + (2 * 2) + (3 * 3) = 14 ~~~ ### $product * ` $product(fn)` - 计算数组中的所有元素的乘积 示例代码1: ~~~javascript [1, 2, 3].$product(); // => 6 [1, 2, 3, 4].$product(); // => 24 [1, 2, 3, 4, 5].$product(); // => 120 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$product(function (k, v) { return v + v; }); // => 48 // 相当于 (1 + 1) * (2 + 2) * (3 + 3) = 48 ~~~ ### $rand * ` $rand(size)` - 随机截取数组片段,size默认为1 示例代码1: ~~~javascript var arr = [1, 2, 3, 4]; newArr = arr.$rand(); // arr不变,newArr => [3] newArr = arr.$rand(); // arr不变,newArr => [2] newArr = arr.$rand(); // arr不变,newArr => [4] newArr = arr.$rand(2); // arr不变,newArr => [3, 1] ~~~ ### $size * ` $size()` - 计算元素数量 示例代码1: ~~~javascript [1, 2, 3].$size(); // => 3 ~~~ ### $count 同`$size()`作用一致。 ### $chunk * ` $chunk(size = 1)` - 返回数组分成新多个片段的结果,并不影响原来的数组 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$chunk(); // => [[1], [2], [3], [4], [5]] [1, 2, 3, 4, 5].$chunk(1); // => [[1], [2], [3], [4], [5]] [1, 2, 3, 4, 5].$chunk(2); // => [[1, 2], [3, 4], [5]] [1, 2, 3, 4, 5].$chunk(3); // => [[1, 2, 3], [4, 5]] [1, 2, 3, 4, 5].$chunk(5); // => [[1, 2, 3, 4, 5]] [1, 2, 3, 4, 5].$chunk(6); // => [[1, 2, 3, 4, 5]] ~~~ ### $combine * ` $combine(array1, ...)` - 取得当前数组和其他数组组合之后的结果 示例代码1: ~~~javascript [1, 2, 3, 4, 5].$combine(["a", "b", "c", "d", "e"]); // => [[1, "a"], [2, "b"], [3, "c"], [4, "d"], [5, "e"]] [1, 2, 3, 4, 5].$combine(["a", "b", "c", "d", "e"], ["a1", "b1", "c1"]); // => [[1, "a", "a1"], [2, "b", "b1"], [3, "c", "c1"], [4, "d", null], [5, "e", null]] 这里如果取不到对应的值,则使用null代替 ~~~ 示例代码2: ~~~javascript [1, 2, 3].$combine(["a", "b", "c"]).$combine([ "a1", "b1", "c1" ]); // => [[[1, "a"], "a1"], [[2, "b"], "b1"], [[3, "c"], "c1"]] ~~~~ ### $equal * ` $equal(array2)` - 判断两个数组是否以同样的顺序包含同样的元素 示例代码1: ~~~javascript [1, 2, 3].$equal(); // => false [1, 2, 3].$equal([1, 2, 3]); // => true [1, 2, 3].$equal([1, "2", 3]); // => true [1, 2, 3].$equal([2, 1, 3]); // => false 因为顺序不同 [1, 2, 3].$equal([1, 2, 3, 4]); // => false ~~~ ### $loop * ` $loop(fn)` - 循环使用当前数组的元素来调用某个函数 `fn`接收三个参数: * `k` - 当前元素的索引 * `v` - 当前元素的值 * `loop` - 循环管理器 在`fn`中调用`loop.next()`来进入下一个循环,如果没有调用`next()`,则`fn`最多只会调用一次: ~~~javascript var index = loop.next(); ~~~ 示例代码1(每秒钟打印一次): ~~~javascript [1, 2, 3, 4, 5].$loop(function (k, v, loop) { console.log("index:" + k + " " + v + " ----- " + (new Date())); setTimeout(function () { // 进入下一个循环 loop.next(); }, 1000); }); ~~~ 在`fn`中调用`loop.sleep(ms)`来延时`ms`时间后才进入下一个循环,示例代码2: ~~~javascript [1, 2, 3, 4, 5].$loop(function (k, v, loop) { console.log("index:" + k + " " + v + " ----- " + (new Date())); loop.sleep(2000); }); ~~~ 示例代码3(时钟): ~~~javascript [1, 2, 3, 4, 5].$loop(function (k, v, loop) { var date = new Date(); document.body.innerHTML = date.getHours().toString() + ":" + date.getMinutes() + ":" + date.getSeconds(); loop.sleep(1000); }); ~~~ ### $asJSON * ` $asJSON(field)` - 取得当前数组转换为JSON格式的字符串 示例代码1: ~~~javascript [1, 2, 3].$asJSON(); // => "[1,2,3]" ~~~ ### $copy * ` $copy()` - 拷贝数组 示例代码1: ~~~javascript var arr = [1, 2, 3].$copy(); // arr => [1, 2, 3] ~~~ ### $range * ` Array.$range(start, end, step)` - 从一个限定的范围数字或字符生成一个数组 示例代码1: ~~~javascript var arr = Array.$range(1, 5); // arr => [1, 2, 3, 4, 5] ~~~ 示例代码2: ~~~javascript var arr = Array.$range(1, 5, 2); // arr => [1, 3, 5] ~~~ ### $isArray * ` Array.$isArray(obj)` - 判断一个对象是否为数组 示例代码1: ~~~javascript Array.$isArray([1, 2, 3]); // => true Array.$isArray({ "name": "Libai" }); // => false ~~~ ## 在线测试 [https://jsfiddle.net/liuxiangchao/j710t34j/6/](https://jsfiddle.net/liuxiangchao/j710t34j/3/)