Array

创建数组

// 创建一个空数组
var arr1 = new Array();
var arr2 = Array();
var arr3 = [];

// 创建一个长度为5的数组,它包含5个undefined
var arr1 = new Array(5);
var arr2 = Array(5);

// 创建一个长度为3的数组,它的包含“red”,“blue”和“green”.
var arr1 = new Array('red', 'blue', 'green');
var arr2 = Array('red', 'blue', 'green');
var arr3 = ['red', 'blue', 'green'];

数组的长度

var arr = [1, 2, 3];

arr.length = 2;

arr  // [1, 2]

arr.length = 5;

arr  // [1, 2, undefined, undefined, undefined]

数组的检测

var arr = [1, 2, 3];

// 方法1
arr instanceof Array  // true

// 方法2 ECMAScript5 推荐
Array.isArray(arr)    // true

数组的转换方法

// 数组转换时,undefined为""

var person1 = {
    toLocaleString : function () {
        return "toLocaleString1";
    },
    toString : function() {
        return "toString1";
    }
};

var person2 = {
    toLocaleString : function () {
        return "toLocaleString2";
    },
    toString : function() {
        return "toString2";
    }
};

var people = [person1, person2];

people                  // toString1,toString2
people.valueOf()        // toString1,toString2
people.toString()       // toString1,toString2
people.toLocaleString() // toLocaleString1,toLocaleString2

people.join()      // toString1,toString2
people.join('||')  // toString1||toString2

栈方法

var arr = [0];

var n = arr.push(1, 2, 3);

arr  // [0, 1, 2, 3]
n    // 4

n = arr.push(4);

arr  // [0, 1, 2, 3, 4]
n    // 5

var i = arr.pop();

arr  // [0, 1, 2, 3]
i    // 4

队列方法

var arr = [0, 1, 2, 3];

var i = arr.shift();

arr  // [1, 2, 3]
i    // 0

var n = arr.unshift(4, 5);

arr // [4, 5, 1, 2, 3]
n   // 5
 

数组排序

var arr = [0, 1, 3, 2, 10];

// 反转原数组顺序
var re = arr.reverse();

arr  // [10, 2, 3, 1, 0]
re   // [10, 2, 3, 1, 0]

// 按toString()排序
var so = arr.sort();

arr  // [0, 1, 10, 2, 3]
so   // [0, 1, 10, 2, 3]

// 自定义排序方法 数值由小到大排序
arr.sort(function(a, b) {
  return a<b ? -1 : 1;
});

arr  // [0, 1, 2, 3, 10]

// 对于数值类型,数值由小到大排序 推荐方法
arr.sort(function(a, b) {
  return a-b;
});

arr  // [0, 1, 2, 3, 10

操作方法

// 数组合并
var arr1 = [0, 1, 2];
var arr2 = arr1.concat(3, [4, 5], [6, 7]);

arr1  // [0, 1, 2]
arr2  // [0, 1, 2, 3, 4, 5, 6, 7]

// 数组截取
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.slice(1);
var arr3 = arr1.slice(1, 4);
var arr4 = arr1.slice(-4, -2);

arr1  // [0, 1, 2, 3, 4, 5]
arr2  // [1, 2, 3, 4, 5]
arr3  // [1, 2, 3]
arr4  // [2, 3]

// 万能大法 splice()
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.splice(0, 2);      // 删除

arr1  // [2, 3, 4, 5]
arr2  // [0, 1]

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 0, 7, 8, 9); // 插入

arr1  // [0, 1, 7, 8, 9, 2, 3, 4, 5]
arr2  // []

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 2, 7, 8, 9); // 删除并插入

arr1  // [0, 1, 7, 8, 9, 4, 5]
arr2  // [2, 3]

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(-2, 2, 7, 8, 9); // 删除并插入2

arr1  // [0, 1, 2, 3, 7, 8, 9]
arr2  // [4, 5]

查询元素位置

var arr = ['a', 'b', 'c', 'd', 'c', 'b', 'a'];

arr.indexOf('c')         // 2
arr.lastIndexOf('c')     // 4

arr.indexOf('c', 3)      // 4
arr.lastIndexOf('c', 3)  // 2
arr.lastIndexOf('c', -5) // 2

// 查询用的是===比较
var person = { name: "Nicholas" };

var people = [{ name: "Nicholas" }];
var morePeople = [person];

people.indexOf(person)     // -1
morePeople.indexOf(person) // 0

数组迭代方法

/* 
 * 以下每个方法都接收两个参数:
 *   1. 要在每一项上运行的函数
 *       参数包括:当前元素,当前下标,原数组
 *   2. (可选的)运行该函数的作用域对象——影响this的值
 */
var arr = [0, 1, 2, 3, 4, 5];

// 数组中任何元素都满足函数中的条件,返回true,否则返回false
var ev = arr.every(fun1);
ev  // false

// 数组中有元素满足函数中的条件,返回true,都不满足返回false
var so = arr.some(fun1);
so  // true

// 返回数组中满足函数条件的元素数组
var fi = arr.filter(fun1);
fi  // [4, 5]

// 返回数组所有元素运行函数后的结果
var ma = arr.map(fun2);
ma  // [0, 2, 4, 6, 8, 10]

// 相当于for循环,没有返回值
var fo = arr.forEach(fun2);
fo  // undefined

// 判断元素是否大于3
function fun1(item, index, array) {
  return item>3;
}

// 元素值 * 2
function fun2(item, index, array) {
  return item*2;
}

缩小方法(在我看来依旧是迭代方法~)

var arr = [0, 1, 2, 3, 4, 5];

// 从前向后迭代,返回最终结果
var re = arr.reduce(fun1);

console.log(re);
// prev=0 cur=1 index=1 arr=0,1,2,3,4,5
// prev=1 cur=2 index=2 arr=0,1,2,3,4,5
// prev=3 cur=3 index=3 arr=0,1,2,3,4,5
// prev=6 cur=4 index=4 arr=0,1,2,3,4,5
// prev=10 cur=5 index=5 arr=0,1,2,3,4,5
// 15

// 从后向前迭代,返回最终结果
var rr = arr.reduceRight(fun1);

console.log(rr);
// prev=5 cur=4 index=4 arr=0,1,2,3,4,5
// prev=9 cur=3 index=3 arr=0,1,2,3,4,5
// prev=12 cur=2 index=2 arr=0,1,2,3,4,5
// prev=14 cur=1 index=1 arr=0,1,2,3,4,5
// prev=15 cur=0 index=0 arr=0,1,2,3,4,5
// 15

// 参数(前一个值,当前值,下标,原数组)
function fun1(prev, cur, index, array) {
  console.log('prev=' + prev + ' cur=' + cur + ' index=' + index + ' arr=' + array);
  return prev+cur;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值