# 0x01 数组 栈操作 push, pop

栈是一种 LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置——栈的顶部

// 数组模拟栈  FILO
var arr = [1, 2, 3, 4, 5];

// 像数组中添加元素
arr.push(6, 7); // 1,2,3,4,5,6,7

// 从队首删除元素
arr.pop(); //1,2,3,4,5,6

# 0x02 数组队列操作 push shift

栈数据结构的访问规则是 LIFO(后进先出),而队列数据结构的访问规则是FIFO(First-In-First-Out, 先进先出)。队列在列表的末端添加项,从列表的前端移除项

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

arr.push(6, 7); // 1,2,3,4,5,6,7

arr.shift(); //2,3,4,5,6,7

# 0x03 unshift 从数组头部添加元素

unshift()shift() 的用途相反: 它能在数组前端添加任意个项并返回新数组的长度

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

arr.unshift(7, 8); // 7,8,1,2,3,4,5

# 0x04 重排序方法 sort, reverse

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

var newarr = arr.sort(compare); // 1,2,3,3,4,5,8

function compare(x, y) {
    if (x > y) {
        return 1;
    } else {
        return -1;
    }
}

# 0x05 数组操作方法 concat slice

slice() ,它能够基于当前数组中的一或多个项创建一个新数组。 slice() 方法可以 接受一或两个参数,即要返回项的起始和结束位置

// concat

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

var newarr = arr.concat(10, 11); // 1,2,3,4,5,8,3,10,11

// slice

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

var arr1 = arr.slice(0, 3); // 1, 2, 3

var arr2 = arr.slice(3, -1);// 4, 5, 6

# 0x06 splice 方法, 删除, 插入, 替换

删除

可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。 例如, splice(0,2) 会删除数组中的前两项

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

arr.splice(0, 2); // 3,4,5,8,3

插入

可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、0(要删除的项数) 和要插入的项。如果要插入多个项,可以再传入第四、第五,以至任意多个项。例如, splice(2,0,"red","green") 会从当前数组的位置 2 开始插入字符串 "red""green"

var arr = [1, 1, 1, 1];

arr.splice(2, 0, 2, 2); // 1,1,2,2,1,1

替换

可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起 始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如, splice (2,1,"red","green") 会删除当前数组位置 2 的项,然后再从位置 2 开始插入字符串 "red""green"

var arr = [1, 1, 1, 1];

arr.splice(0, 2, 2, 2); // 2,2,1,1

# 0x07 数组位置方法 indexOf, lastIndexOf

var arr = [1, 2, 3, 4, 6, 6, 7];

var indexOfArr = arr.indexOf(6); // 4

var lastIndexOfArr = arr.lastIndexOf(6); // 5

# 0x08 数组 every 方法

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

var newArr = arr.every(function (element) {
return element > 0;
}); // true


var newArr = arr.every(function (element) {
return element > 1;
}); // false

# 0x09 数组 filter 方法

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

var filterArr = arr.filter(function (element, index) {
return element > 3;
}); // [4, 5, 6, 7]

var filterArr = arr.filter(function (element, index) {
return element < 6;
}); // [1, 2, 3, 4, 5]

# 0x0a 数组 foreach 方法

var names = ['xiaoming', 'xiaohong', 'zhangsan', 'lishi'];

names.forEach(function (element, index) {
    console.info(element);
});

# 0x0b 数组 map 方法


var names = ['xiaoming', 'xiaohong', 'zhangsan', 'lishi'];

var mapArr = names.map(function (element, index) {
return element.concat(" map");
});

mapArr.forEach(function (element) {
console.info(element);
}); // ["xiaoming map", "xiaohong map", "zhangsan map", "lishi map"]

# 0x0c 数组 some 方法

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

var someFlag = arr.some(function (element) {
    return element > 6;
});  // true;

var someFlag = arr.some(function (element) {
    return element > 7;
}); // false;

# 0x0d 数组 reduce 方法

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

var total = arr.reduce(function (pre, cur, index, array) {
console.log('pre, cur, index, array: ', pre, cur, index, array);
    return pre + cur;
}); // 28
/**
    pre, cur, index, array: 1 2 1(7)[1, 2, 3, 4, 5, 6, 7]
    pre, cur, index, array: 3 3 2(7)[1, 2, 3, 4, 5, 6, 7]
    pre, cur, index, array: 6 4 3(7)[1, 2, 3, 4, 5, 6, 7]
    pre, cur, index, array: 10 5 4(7)[1, 2, 3, 4, 5, 6, 7]
    pre, cur, index, array: 15 6 5(7)[1, 2, 3, 4, 5, 6, 7]
    pre, cur, index, array: 21 7 6(7)[1, 2, 3, 4, 5, 6, 7]
*/
最后编辑时间: 1/17/2020, 9:35:20 AM