JavaScript 栈方法

59 阅读5分钟
栈是一种LIFO的数据结构,也就是最新添加的项最早被移除。而栈中项的插入叫推入,移除叫弹出,值发生在一个位置——栈的顶部。ECMAScript为数组专门提供了 push()和pop()方法,以便实现类似栈的行为
  1. push()方法可以接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度
var colors = new Array();
var count = colors.push("red","green");
console.log(count) //结果 2
  1. pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
var num = [1, 2, 3, 4, 5];
num.pop();
console.log(num.length) //结果 4
console.log(num) //结果 [1, 2, 3, 4]
  1. unshift()方法可以数组前添加任意个项
var num = [1,2,3,4,5]
num.unshift(0);
console.log(num) //结果 [0,1,2,3,4,5]
  1. shift()方法从数组中移除第一项,减少数组的冷length值
var num = [1, 2, 3, 4, 5]
num.shift();
console.log(num.length) //结果 4
console.log(num) //结果 [2, 3, 4, 5]
  1. reverse()方法会反转数组项的顺序
var num = [1, 2, 3, 4, 5];
num.reverse();
console.log(num) //结果 [5, 4, 3, 2, 1]

6.sort()方法按照升序排列数组的项,即最小的值位于最前面,最大的值位于最后面。

var num = [0, 5, 10, 15, 20];
num.sort();
console.log(num); //结果 [0, 10, 15, 20, 5]
/*上方代码,即使例子的值顺序没有问题,但sort()方法也会根据测试字符串的结果改变原来的顺序。因为在进行字符比较的时候 “10则位于“5”的前面,于是顺序被修改了。下方例子使用于大多数据类型*/
function compare (value1, value2) {
    if(value1 < value2)
        return -1;
    else if (value1 > value2)
        return 1;
    else
        return 0;
}
num.sort(compare)
console.log(num)
  1. concat()方法可以基于当前数组中的所有项常见一个新数组。
var colors = ['red', 'green', 'blue'];
var colors2 = colors.concat('yellow','black')
console.log(colors) //结果 ['red', 'green', 'blue']
console.log(colors2) //结果 ['yellow', ‘black’, 'red', 'green', 'blue']
  1. slice()方法可以接受一或者二个参数,即要返回项的起始和结束位置; 在只有一个参数的情况下,slice()方法返回从该参数制定位置开始到当前数组末尾的所有项 在有两个参数的情况下,slice()方法返回起始和结束位置之间的项——但不包括结束位置的项
var colors = ['res', 'green', 'blue', 'yellow', 'blue']
var colors2 = colors.slice(1);
var colors3 = colors.slice(1, 4)
console.log(colors) //结果 ['res', 'green', 'blue', 'yellow', 'blue']
console.log(colors2) //结果 ['green', 'blue', 'yellow', 'blue']
console.log(colors3) //结果 ['green', 'blue', 'yellow']
  1. splice()方法要算是最强大的数组方法了它有很多种用法 删除:可以删除任意数量的项,只需要指定2个参数,要删除第一项的位置和要删除的项数。例如:splice(0,2)会删除数组中的前两项 插入:可以向指定位置插入任意数量的项,只需要提供3个参数,起始位置、0、要插入的项。例如:splice(1,0,‘red’, 'green')会从当前数组的位置2开始插入字符串 替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,只需指定3个参数,起始位置、要删除的项数和要插入的任意数量的项。例如:splice(2,1,'red','green')会删除当前数组位置2的项,然后再从位置2开始插入字符串
var colors = ['red', 'green', 'blue'];
colors.splice(0, 1) //删除第一项 结果 ['green', 'blue']
colors.splice(1, 0, 'yellow', 'orange') //从位置1插入两项 结果 ['green', 'yellow', 'orange', 'blue']
colors.splice(1, 1, 'red', 'purple') //插入两项,删除一项 结果 ['green', 'red', 'purple', 'orange', 'blue']
  1. indexof()和 lastIndexOf() 方法是位置方法,这两个方法都接收两个参数;要查找的项和可选项。 indexOf()方法是从数组开始项(位置0)向后查找 lastIndexOf()方法是从数组的末尾开始向前查找
var numbers = [1,2,3,4,5,6,7,8,9]
console.log('位置' + numbers.indexOf(5)) //结果 位置4
console.log('位置' + numbers.lastIndexOf(8)) //结果 位置7
  1. 迭代方法,ECMAScript5为数组定义了5个迭代方法 every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。 filter():对数组中的每一项运行给定函数,返回该函数会true的项组成的数组。 forEach():对数组中的每一项运行给定函数,这个方法没有返回值。 map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。 some():对数组中的每一项运行给定函数,如果该函数对任一项返回true,则返回true。 这些方法中最相似的是every()和some(),它们都用于查询数组中的项是否满足某个条件
var numbers = [1,2,3,4,5,6,7,8,9]

//every() 每一项是否都满足条件
var everyResult = numbers.every(function(item, index, array){
    return (item > 2)
})
console.log(everyResult) //结果 false

//some() //数组内是否有项满足条件
var someResult = numbers.some(function(item, index, array){
    return (item > 2)
})
console.log(someResult) //结果 true

//filter() //返回满足条件项的数组
var filterResult = numbers.filter(function(item, index, array){
    return (item > 2)
})
console.log(filterResult) //结果 [3,4,5,6,7,8,9]

//map() 对数组进行操作
var mapResult = numbers.map(function(item, index, array){
    return item * 2
})
console.log(mapResult) //结果 [2,4,6,8,10,12,14,16,18]

//forEash() 本质上与使用for()循环迭代数组一样,这个方法没有返回值
var forEashResult = numbers.forEash(function(item, index, array){
    document.getElementById('body').append(item)
})
  1. 缩小方法,ECMAScript5还增加了两个缩小数组的方法,这两个方法都会迭代数组的所有项,然后构建一个最终返回值。 reduce()方法从数组的第一项开始,逐个遍历到最后。 reduceRight()方法则从数组最后一项开始,向前遍历到第一项。
//redue() 
var numbers = [1,2,3,4,5]
var sum = numbers.reduce(function(prev, cur, index, array){
    return prev + cur
})
console.log(sum) //结果 15

//reduceRight()
var numbers = [1,2,3,4,5]
var sum = numbers.reduceRight(function(prev, cur, index, array){
    return prev + cur
})
console.log(sum) //结果 15