Home

Awesome

Array.js

Array.js帮助开发人员更优雅地操作Javascript数组。

使用

直接引入 Array.jsArray.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中定义的方法。

API

辅助

迭代器

在参数中使用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]

文档

$pad

示例代码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"]

$fill

示例代码1:

var arr = [1, 2, 3];
arr.$fill("a", 5); // arr => [1, 2, 3, "a", "a"]

$push

示例代码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]

$pushAll

示例代码1:

var arr = [1, 2, 3];
arr.$pushAll([4, 5, 6]); // arr => [1, 2, 3, 4, 5, 6]

$insert

示例代码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]

$removeValue

示例代码1:

var arr = [1, 2, 2, 3, 3, 3];
arr.$removeValue(2); // arr => [1, 3, 3, 3]

$remove

示例代码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]

$drop

示例代码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]

$removeIf

示例代码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 => []

$keepIf

示例代码1:

var arr = [ 1, 2, 3, 4, 5];
arr.$keepIf(function (k, v) {
	return (v >= 3);
})
// arr => [3, 4, 5]

$clear

示例代码1:

var arr = [1, 2, 3];
arr.$clear(); // arr => []

$replace

示例代码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"]

$unique

示例代码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]

$set

示例代码1:

var arr = [1, 2, 3];
arr.$set(1, "a"); // arr => [1, "a", 3]
arr.$set(4, "a"); // arr不变,因为4已经超出数组长度

$sort

示例代码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]

$rsort

示例代码同$sort(compare),只不过把顺序倒过来。

$asort

$arsort

$asc

示例代码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 }
]

$desc

示例代码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 }
]

$swap

示例代码1:

arr = [1, 2, 3];
arr.$swap(0, 2); // arr => [3, 2, 1]

$shuffle

示例代码1:

var arr = [1, 2, 3];
arr.$shuffle();  // arr => [2, 3, 1]
arr.$shuffle();  // arr => [1, 3, 2]

$contains

示例代码1:

[1, 2, 3].$contains(3); // => true
[1, 2, 3].$contains(4); // => false
[1, 2, 3].$contains(null); // => false

$include

$each

示例代码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

$get

示例代码1:

[1, 2, 3].$get(0); // => 1
[1, 2, 3].$get(2); // => 3
[].$get(0); // => null

$getAll

示例代码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]

$first

示例代码1:

[1, 2, 3].$first(); // => 1
[].$first(); // => null

$last

示例代码1:

[1, 2, 3].$last(); // => 3
[].$last(); // => null

$isEmpty

示例代码1:

[1, 2, 3].$isEmpty(); // => false
[].$isEmpty(); // => true

$all

示例代码1:

[1, 2, 3].$all(function (k, v) {
	return v > 1;
});
// => false

示例代码2:

[1, 2, 3].$all(function (k, v) {
	return v > 0;
});
// => true

$any

示例代码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

$map

示例代码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

$reduce

示例代码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

$find

示例代码1:

[1, 2, 3].$find(); // => 1 取第一个

示例代码2:

[1, 2, 3].$find(function (k, v) {
	return (v > 1);
});
// => 2

$findAll

示例代码1:

[1, 2, 3, 4, 5].$findAll(function (k, v) {
	return (v > 3);
});
// => [4, 5]

$filter

<array> $filter(fn) - 同$findAll(fn)作用一致

$exist

示例代码1:

[1, 2, 3].$exist(function (k, v) {
	return (v > 4);
});
// => false

[1, 2, 3].$exist(function (k, v) {
	return (v == 3);
});
// => true

$reject

示例代码1:

[1, 2, 3, 4, 5].$reject(function (k, v) {
	return (v > 3);
});
// => [1, 2, 3]

$grep

示例代码1:

["a", "b", "c", 10, "11"].$grep(/\d+/); // => [10, "11"]

$keys

$indexesOf

示例代码1:

[1, "2", 3].$indexesOf(2); // => [1]
[1, "2", 3].$indexesOf(2, true); // => [] 因为"2"和2的数据类型不同

$diff

示例代码1:

[1, 2, 3, 4, 5].$diff([2, 3, 4, 6]); // => [1, 5] 注意"6"并不在其中

$intersect

示例代码1:

[1, 2, 3].$intersect([2, 3, 4]); // => [2, 3]

$max

示例代码1:

[1, 2, 3].$max(); // => 3

示例代码2:

[1, 2, 3].$max(function (v1, v2) {
	return v2 - v1;
}); 
// => 1

$min

示例代码1:

[1, 2, 3].$min(); // => 1

示例代码2:

[1, 2, 3].$min(function (v1, v2) {
	return v2 - v1;
}); 
// => 3

$sum

示例代码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

$product

示例代码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

$rand

示例代码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]

$size

示例代码1:

[1, 2, 3].$size(); // => 3
[1, 2, 3].$size(function (k, v) {
	return v >= 2;
}); // => 2

$count

$size(fn)作用一致。

$chunk

示例代码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]]

$combine

示例代码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"]]

$equal

示例代码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

$loop

fn接收三个参数:

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);
});

$asJSON

示例代码1:

[1, 2, 3].$asJSON(); // => "[1,2,3]"

$copy

示例代码1:

var arr = [1, 2, 3].$copy(); // arr => [1, 2, 3]

$range

示例代码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]

$isArray

示例代码1:

Array.$isArray([1, 2, 3]); // => true
Array.$isArray({ "name": "Libai" }); // => false

在线测试

https://jsfiddle.net/liuxiangchao/j710t34j/6/