Array.js帮助开发人员更优雅地操作Javascript数组。
直接引入 Array.js 或 Array.min.js:
<script type="text/javascript" src="Array.min.js?v=0.0.3"></script>
然后在Javascript中使用:
var arr = [ 1, 2, 3, 4]; arr.$each(function (k, v) { console.log(v); });
其中$each()就是Array.js中定义的方法。
<boolean> $pad(value, size)- 填充数组 [示例]<boolean> $fill(value, length)- 填充数组到一定长度 [示例]<number> $push(value1, value2, ...)- 在尾部加入一个或多个元素 [示例]<number> $pushAll(array2)- 一次性加入多个元素 [示例]<boolean> $insert(index, obj1, ...)- 在指定位置插入新的元素 [示例]
<boolean> $removeValue(v)- 从数组中删除某个值 [示例]<boolean> $remove(index)- 从数组中删除某个位置上的值 [示例]<array> $drop(count)- 删除后几个元素,并返回删除后的元素集合 [示例]<number> $removeIf(fn)- 删除所有满足条件的元素 [示例]<number> $keepIf(fn)- 保留所有满足条件的元素,删除不满足条件的元素 [示例]<boolean> $clear()- 清空数组 [示例]
<boolean> $replace(newValues)- 将当前数组的元素替换成新的数组中的元素 [示例]<boolean> $unique(fn)- 去除数组中的相同数据 [示例]<boolean> $set(index, value)- 设置某个索引位置上的值 [示例]<boolean> $sort(compare)- 对该数组进行正排序 [示例]<boolean> $rsort(compare)- 对该数组进行倒排序 [示例]<array> $asort(compare)- 对该数组进行正排序,并返回排序后对应的索引 [示例]<array> $arsort(compare)- 对该数组进行倒排序,并返回排序后对应的索引 [示例]<boolean> $asc(field)- 依据单个字段进行正排序 [示例]<boolean> $desc(field)- 依据单个字段进行倒排序 [示例]<boolean> $swap(index1, index2)- 交换数组的两个索引对应的值 [示例]<boolean> $shuffle()- 打乱数组中元素顺序 [示例]
<boolean> $contains(v)/<boolean> $include(v)- 判断数组中是否包含某个值 [示例]<boolean> $each(fn)- 遍历数组 [示例]<mixed> $get(index)- 获取某个索引位置上的值 [示例]<array> $getAll(index1, indexes1, ...)- 获取一组索引对应的值 [示例]<mixed> $first()- 取得第一个元素值 [示例]<mixed> $last()- 取得第一个元素值 [示例]<boolean> $isEmpty()- 判断数组是否为空 [示例]<boolean> $all(fn)- 对容器中元素应用迭代器,并判断是否全部返回真 [示例]<boolean> $any(fn)- 对容器中元素应用迭代器,并判断是否有一次返回真 [示例]<array> $map(fn)/$collect(fn)- 对容器中元素应用迭代器,并将每次执行的结果放入一新数组中 [示例]<mixed> $reduce(fn)- 对容器中元素应用迭代器,并将每次执行的结果放入到下一次迭代的参数中 [示例]<mixed> $find(fn)- 对容器中元素应用迭代器,只要有一次返回值即立即返回由当前元素 [示例]<array> $findAll(fn)/<array> $filter(fn)- 对容器中元素应用迭代器,将所有返回真的元素放入一数组中 [示例]<array> $exist(fn)- 对容器中元素应用迭代器,并判断是否存在返回真的元素 [示例]<array> $reject(fn)- 对容器中元素应用迭代器,将所有返回假的元素放入一数组中 [示例]<array> $grep(pattern)- 找出匹配某正则表达式的元素,并放入一数组中 [示例]<array> $keys(value, strict)/<array> $indexesOf(value, strict)- 取得某一个值在数组中出现的所有的键的集合 [示例]<array> $diff(array2)- 取当前数组与另一数组的差集 [示例]<array> $intersect(array2)- 取当前数组与另一数组的交集 [示例]<mixed> $max(compare)- 取得当前集合中最大的一个值 [示例]<mixed> $min(compare)- 取得当前集合中最小的一个值 [示例]<number> $sum(fn)- 计算数组中的所有元素的总和 [示例]<number> $product(fn)- 计算数组中的所有元素的乘积 [示例]<array> $rand(size)- 随机截取数组片段 [示例]<number> $size(fn)/<number> $count(fn)- 计算元素数量 [示例]<array> $chunk(size = 1)- 返回数组分成新多个片段的结果 [示例]<array> $combine(array1, ...)- 取得当前数组和其他数组组合之后的结果 [示例]<boolean> $equal(array2)- 判断两个数组是否以同样的顺序包含同样的元素 [示例]<boolean> $loop(fn)- 循环使用当前数组的元素来调用某个函数 [示例]<json> $asJSON(field)- 取得当前数组转换为JSON格式的字符串 [示例]
<array> $copy()- 拷贝数组 [示例]<array> Array.$range(start, end, step)- 从一个限定的范围数字或字符生成一个数组 [示例]<boolean> Array.$isArray(obj)- 判断一个对象是否为数组 [示例]
在参数中使用fn表示迭代器,每个迭代器接收两个参数:k(索引)、v(元素值),并且this指向数组本身:
var has = [1, 2, 3, 4].$any(function (k, v) { return v > 10; });
在$sort、$rsort、$min、$max等需要排序的API中,参数中的compare表示迭代器,每个迭代器接收两个参数:v1(第一个值)、v2(第二个值),this指向数组本身:
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]
<boolean> $pad(value, size)- 用value填充数组,默认size为1
示例代码1:
var arr = [1, 2, 3]; arr.$pad("a"); // arr => [1, 2, 3, "a"]
示例代码2:
var arr = [1, 2, 3]; arr.$pad("a", 5); // arr => [1, 2, 3, "a", "a", "a", "a", "a"]
<boolean> $fill(value, length)- 填充数组到一定长度
示例代码1:
var arr = [1, 2, 3]; arr.$fill("a", 5); // arr => [1, 2, 3, "a", "a"]
<number> $push(value1, value2, ...)- 在尾部加入一个或多个元素
示例代码1:
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]
<number> $pushAll(array2)- 一次性加入多个元素
示例代码1:
var arr = [1, 2, 3]; arr.$pushAll([4, 5, 6]); // arr => [1, 2, 3, 4, 5, 6]
<boolean> $insert(index, obj1, ...)- 在指定位置插入新的元素,index参数支持负值
示例代码1:
var arr = [1, 2, 3]; arr.$insert(0, "a", "b", "c"); // arr => ["a", "b", "c", 1, 2, 3]
示例代码2:
var arr = [1, 2, 3, 4, 5]; arr.$insert(2, "a", "b", "c"); // arr => [1, 2, "a", "b", "c", 3, 4, 5]
示例代码3:
var arr = [1, 2, 3, 4, 5]; arr.$insert(-2, "a", "b", "c"); // => [1, 2, 3, 4, "a", "b", "c", 5]
<boolean> $removeValue(v)- 从数组中删除某个值
示例代码1:
var arr = [1, 2, 2, 3, 3, 3]; arr.$removeValue(2); // arr => [1, 3, 3, 3]
<boolean> $remove(index)- 从数组中删除某个位置上的值,index支持负值
示例代码1:
var arr = [1, 2, 3, 4, 5]; arr.$remove(2); // arr => [1, 2, 4, 5]
示例代码2:
var arr = [1, 2, 3, 4, 5]; arr.$remove(-2); // arr => [1, 2, 3, 5]
<array> $drop(count)- 删除后几个元素,并返回删除后的元素集合
示例代码1:
var arr = [1, 2, 3, 4, 5]; arr.$drop(1); // arr => [1, 2, 3, 4] arr.$drop(1); // arr => [1, 2, 3] arr.$drop(1); // arr => [1, 2]
示例代码2:
var arr = [1, 2, 3, 4, 5]; var dropped = arr.$drop(3); // arr => [1, 2] dropped => [3, 4, 5]
<number> $removeIf(fn)- 删除所有满足条件的元素,并返回删除的元素的个数
示例代码1:
var arr = [ 1, 2, 3, 4, 5]; arr.$removeIf(function (k, v) { return (v >= 3); }); // arr => [1, 2]
示例代码2:
var arr = [ 1, 2, 3, 4, 5]; arr.$removeIf(function (k, v) { return true; }); // arr => []
<number> $keepIf(fn)- 保留所有满足条件的元素,删除不满足条件的元素,并返回删除的元素的个数
示例代码1:
var arr = [ 1, 2, 3, 4, 5]; arr.$keepIf(function (k, v) { return (v >= 3); }) // arr => [3, 4, 5]
<boolean> $clear()- 清空数组
示例代码1:
var arr = [1, 2, 3]; arr.$clear(); // arr => []
<boolean> $replace(newValues)- 将当前数组的元素替换成新的数组中的元素
示例代码1:
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"]
<boolean> $unique(fn)- 去除数组中的相同数据
示例代码1:
var arr = [1, 2, 2, 3, 3, 3]; arr.$unique(); // arr => [1, 2, 3]
示例代码2:
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]
<boolean> $set(index, value)- 设置某个索引位置上的值
示例代码1:
var arr = [1, 2, 3]; arr.$set(1, "a"); // arr => [1, "a", 3] arr.$set(4, "a"); // arr不变,因为4已经超出数组长度
<boolean> $sort(compare)- 对该数组进行正排序
示例代码1:
var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return (v1 - v2) ; }); //arr => [1, 2, 3, 4, 5]
示例代码2(实现倒排序):
var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return -(v1 - v2) ; }); //arr => [5, 4, 3, 2, 1]
示例代码3(实现随机排序):
var arr = [4, 2, 5, 3, 1]; arr.$sort(function (v1, v2) { return Math.random() - 0.5; }); //arr => [2, 4, 5, 1, 3]
<boolean> $rsort(compare)- 对该数组进行倒排序
示例代码同$sort(compare),只不过把顺序倒过来。
<array> $asort(compare)- 对该数组进行正排序,并返回排序后对应的索引
<array> $arsort(compare)- 对该数组进行倒排序,并返回排序后对应的索引
<boolean> $asc(field)- 依据单个字段进行正排序
示例代码1:
var arr = [ { "name": "Libai", "age": 24 }, { "name": "Zhangsan", "age": 22 }, { "name": "Wanger", "age": 23 } ]; arr.$asc("age");
此时的arr变成:
[
{ "name": "Zhangsan", "age": 22 },
{ "name": "Wanger", "age": 23 },
{ "name": "Libai", "age": 24 }
]<boolean> $desc(field)- 依据单个字段进行倒排序
示例代码1:
var arr = [ { "name": "Libai", "age": 24 }, { "name": "Zhangsan", "age": 22 }, { "name": "Wanger", "age": 23 } ]; arr.$desc("age");
此时的arr变成:
[
{ "name": "Libai", "age": 24 },
{ "name": "Wanger", "age": 23 },
{ "name": "Zhangsan", "age": 22 }
]<boolean> $swap(index1, index2)- 交换数组的两个索引对应的值
示例代码1:
arr = [1, 2, 3]; arr.$swap(0, 2); // arr => [3, 2, 1]
<boolean> $shuffle()- 打乱数组中元素顺序
示例代码1:
var arr = [1, 2, 3]; arr.$shuffle(); // arr => [2, 3, 1] arr.$shuffle(); // arr => [1, 3, 2]
<boolean> $contains(v)- 判断数组中是否包含某个值
示例代码1:
[1, 2, 3].$contains(3); // => true [1, 2, 3].$contains(4); // => false [1, 2, 3].$contains(null); // => false
<boolean> $include(v)- 同$contains(v)作用一致
<boolean> $each(fn)- 遍历数组
示例代码1:
[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
<mixed> $get(index)- 获取某个索引位置上的值
示例代码1:
[1, 2, 3].$get(0); // => 1 [1, 2, 3].$get(2); // => 3 [].$get(0); // => null
<array> $getAll(index1, indexes1, ...)- 获取一组索引对应的值,如果超出索引范围,则不返回数据
示例代码1:
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]
<mixed> $first()- 取得第一个元素值
示例代码1:
[1, 2, 3].$first(); // => 1 [].$first(); // => null
<mixed> $last()- 取得第一个元素值
示例代码1:
[1, 2, 3].$last(); // => 3 [].$last(); // => null
<boolean> $isEmpty()- 判断数组是否为空
示例代码1:
[1, 2, 3].$isEmpty(); // => false [].$isEmpty(); // => true
<boolean> $all(fn)- 对容器中元素应用迭代器,并判断是否全部返回真
示例代码1:
[1, 2, 3].$all(function (k, v) { return v > 1; }); // => false
示例代码2:
[1, 2, 3].$all(function (k, v) { return v > 0; }); // => true
<boolean> $any(fn)- 对容器中元素应用迭代器,并判断是否有一次返回真
示例代码1:
[1, 2, 3].$any(function (k, v) { return v > 3; }); // => false
示例代码2:
[1, 2, 3, 4, 5].$any(function (k, v) { return v > 3; }); // => true
<array> $map(fn)- 对容器中元素应用迭代器,并将每次执行的结果放入一新数组中
示例代码1:
[1, 2, 3].$map(function (k, v) { return v * v; }); // => [1, 4, 9]
从v0.0.2起,可以使用Array.$nil来跳过某些不想返回的值:
[1, 2, 3].$map(function (k, v) { if (v == 2) {// 跳过值为2的元素 return Array.$nil; } return v * v; }); // => [1, 9]
$collect(fn)- 同$map(fn)作用一致
<mixed> $reduce(fn)- 对容器中元素应用迭代器,并将每次执行的结果放入到下一次迭代的参数中
示例代码1:
[1, 2, 3, 4, 5].$reduce(function (k, v, result) { return result + v; }); // => 15
示例代码2:
[1, 2, 3, 4, 5].$reduce(function (k, v, result) { if (result == 0) { result = 1; } return result * v; }); // => 120
<mixed> $find(fn)- 对容器中元素应用迭代器,只要有一次返回值即立即返回由当前元素
示例代码1:
[1, 2, 3].$find(); // => 1 取第一个
示例代码2:
[1, 2, 3].$find(function (k, v) { return (v > 1); }); // => 2
<array> $findAll(fn)- 对容器中元素应用迭代器,将所有返回真的元素放入一数组
示例代码1:
[1, 2, 3, 4, 5].$findAll(function (k, v) { return (v > 3); }); // => [4, 5]
<array> $filter(fn) - 同$findAll(fn)作用一致
<array> $exist(fn)- 对容器中元素应用迭代器,并判断是否存在返回真的元素
示例代码1:
[1, 2, 3].$exist(function (k, v) { return (v > 4); }); // => false [1, 2, 3].$exist(function (k, v) { return (v == 3); }); // => true
<array> $reject(fn)- 对容器中元素应用迭代器,将所有返回假的元素放入一数组中
示例代码1:
[1, 2, 3, 4, 5].$reject(function (k, v) { return (v > 3); }); // => [1, 2, 3]
<array> $grep(pattern)- 找出匹配某正则表达式的元素,并放入一数组中
示例代码1:
["a", "b", "c", 10, "11"].$grep(/\d+/); // => [10, "11"]
<array> $keys(value, strict)- 同$indexesOf(value, strict)
<array> $indexesOf(value, strict)- 取得某一个值在数组中出现的所有的键的集合
示例代码1:
[1, "2", 3].$indexesOf(2); // => [1] [1, "2", 3].$indexesOf(2, true); // => [] 因为"2"和2的数据类型不同
<array> $diff(array2)- 取当前数组与另一数组的差集
示例代码1:
[1, 2, 3, 4, 5].$diff([2, 3, 4, 6]); // => [1, 5] 注意"6"并不在其中
<array> $intersect(array2)- 取当前数组与另一数组的交集
示例代码1:
[1, 2, 3].$intersect([2, 3, 4]); // => [2, 3]
<mixed> $max(compare)- 取得当前集合中最大的一个值
示例代码1:
[1, 2, 3].$max(); // => 3
示例代码2:
[1, 2, 3].$max(function (v1, v2) { return v2 - v1; }); // => 1
<mixed> $min(compare)- 取得当前集合中最小的一个值
示例代码1:
[1, 2, 3].$min(); // => 1
示例代码2:
[1, 2, 3].$min(function (v1, v2) { return v2 - v1; }); // => 3
<number> $sum(fn)- 计算数组中的所有元素的总和
示例代码1:
[1, 2, 3].$sum(); // => 6 [1, 2, 3, 4].$sum(); // => 10
示例代码2:
[1, 2, 3].$sum(function (k, v) { return v * v; }); // => 14 // 相当于:(1 * 1) + (2 * 2) + (3 * 3) = 14
<number> $product(fn)- 计算数组中的所有元素的乘积
示例代码1:
[1, 2, 3].$product(); // => 6 [1, 2, 3, 4].$product(); // => 24 [1, 2, 3, 4, 5].$product(); // => 120
示例代码2:
[1, 2, 3].$product(function (k, v) { return v + v; }); // => 48 // 相当于 (1 + 1) * (2 + 2) * (3 + 3) = 48
<array> $rand(size)- 随机截取数组片段,size默认为1
示例代码1:
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]
<number> $size()- 计算元素数量
示例代码1:
[1, 2, 3].$size(); // => 3 [1, 2, 3].$size(function (k, v) { return v >= 2; }); // => 2
同$size(fn)作用一致。
<array> $chunk(size = 1)- 返回数组分成新多个片段的结果,并不影响原来的数组
示例代码1:
[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]]
<array> $combine(array1, ...)- 取得当前数组和其他数组组合之后的结果
示例代码1:
[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:
[1, 2, 3].$combine(["a", "b", "c"]).$combine([ "a1", "b1", "c1" ]); // => [[[1, "a"], "a1"], [[2, "b"], "b1"], [[3, "c"], "c1"]]
<boolean> $equal(array2)- 判断两个数组是否以同样的顺序包含同样的元素
示例代码1:
[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
<boolean> $loop(fn)- 循环使用当前数组的元素来调用某个函数
fn接收三个参数:
k- 当前元素的索引v- 当前元素的值loop- 循环管理器
在fn中调用loop.next()来进入下一个循环,如果没有调用next(),则fn最多只会调用一次:
var index = loop.next();
示例代码1(每秒钟打印一次):
[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:
[1, 2, 3, 4, 5].$loop(function (k, v, loop) { console.log("index:" + k + " " + v + " ----- " + (new Date())); loop.sleep(2000); });
示例代码3(时钟):
[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); });
<json> $asJSON(field)- 取得当前数组转换为JSON格式的字符串
示例代码1:
[1, 2, 3].$asJSON(); // => "[1,2,3]"
<array> $copy()- 拷贝数组
示例代码1:
var arr = [1, 2, 3].$copy(); // arr => [1, 2, 3]
<array> Array.$range(start, end, step)- 从一个限定的范围数字或字符生成一个数组
示例代码1:
var arr = Array.$range(1, 5); // arr => [1, 2, 3, 4, 5]
示例代码2:
var arr = Array.$range(1, 5, 2); // arr => [1, 3, 5]
<boolean> Array.$isArray(obj)- 判断一个对象是否为数组
示例代码1:
Array.$isArray([1, 2, 3]); // => true Array.$isArray({ "name": "Libai" }); // => false