javaScript数组对象常用的方法:
1. 数组
- push方法
- concat方法
- pop方法
- splice方法
- slice方法
- reverse方法
- join方法
- shift方法
- unshift方法
- sort方法
- indexOf方法和lastIndexOf 方法
- forEach方法
- map方法
- filter方法
- every方法
- some方法
- reduce和reduceRight 方法
一、push()和pop()
- push():可以接收任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度
- pop():删除数组末尾最后一项,返回移除的项
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var length = arr.push("jiuqi");
console.log(length); // 5
console.log(arr) //['zhansan', 'lisi', 'wangwu', 'lius', 'jiuqi'];
var de = arr.pop();
console.log(de) // jiuqi
console.log(arr) //['zhansan', 'lisi', 'wangwu', 'lius'];
二、shift和unshift
- shifit():删除原数组的第一项,并返回删除元素的值,如果数组为空的话,那么返回的就是undefined
- unshift:将参数添加到原数组开头,返回的是数组的长度
// shift
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var length = arr.shift();
console.log(length); // zhansan
console.log(arr) // ["lisi", "wangwu", "lius"]
// unshift
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var de = arr.unshift('tian');
console.log(de) // 5
console.log(arr) //["tian", "zhansan", "lisi", "wangwu", "lius"]
三、join()和sort()
- join():将数组转换成字符串,该方法只接收一个参数:即分隔符
- sort():按升序排列数组项——即最小的值位于最前面,最大的值排在最后面,在排序时,它调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值, sort()方法比较的也是字符串
// join
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var length = arr.join();
console.log(length); // zhansan,lisi,wangwu,lius
console.log(arr.join('-')) // zhansan-lisi-wangwu-lius
console.log(arr) // ["zhansan", "lisi", "wangwu", "lius"]
// sort
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var de = arr.sort();
console.log(de) // ["lisi", "lius", "wangwu", "zhansan"]
var arr2 = [11, 23, 45, 3];
console.log(arr2.sort()) //[11, 23, 3, 45]
console.log(arr) //["lisi", "lius", "wangwu", "zhansan"]
为了解决sort的问题,我们可以让sort接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面,比较函数接收两个参数,如果第一个参数大于第二参数则返回整数,两个参数相等返回零
var arr2 = [23, 4, 42, 3, 34]
// console.log(arr2.sort()) // [23, 3, 34, 4, 42]
function compareTwo(value1, value2) {
if (value1 > value2) {
return 1;
} else if (value1 < value2) {
return -1;
} else {
return 0;
}
}
console.log(arr2.sort(compareTwo)); // [3, 4, 23, 34, 42]
四、reverse()
- reverse():反转数组顺序
var arr2 = [23, 4, 42, 3, 34]
console.log(arr2.reverse()) // [34, 3, 42, 4, 23]
console.log(arr2); //[34, 3, 42, 4, 23]
五、concat()
- concat():将参数添加到元数组中,同时可以连接两个数组,原数组不发生改变
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var arr2 = [23, 4, 42, 3, 34]
var arr3 = arr2.concat(arr)
console.log(arr3) //[23, 4, 42, 3, 34, "zhansan", "lisi", "wangwu", "lius"]
六、slice()
- slice(start, end);
- 第一个参数是必须的,表示从何处开始选取,如果是负数,那么它规定从数组尾部开始算起的位置,也就是说:-1代表最后一个元素,-2代表倒数第二个元素,以此类推
- 第二个参数是可选的,规定从何处结束选取,该参数是数组片端结束的数组的下标,如果没用第二个参数,哪儿买就是从选取的start到结束,如果这个参数为负数,那么它规定的是从数组尾部开始算起的元素:
// 如果当start为 0 的时候,它就是从下标 0 开始,依次截取后面的
var arr2 = [23, 4, 42, 3, 34]
var arr3 = arr2.slice(0)
console.log(arr3); //[23, 4, 42, 3, 34]
// 如果start 为负数的时候
var arr4 = arr2.slice(-1);
console.log(arr4); // [34]
// 如果当start为正数,end也为正数的时候
var arr2 = [23, 4, 42, 3, 34]
// 截取下标从0开始,到 2 结束,不包含 2
var arr3 = arr2.slice(0,2)
console.log(arr3); //[23, 4]
// 截取下标从1开始,到 2 结束,不包含 2
var arr4 = arr2.slice(1,2)
console.log(arr4); //[4]
// 如果当start为负数,end也为正数的时候
var arr2 = [23, 4, 42, 3, 34]
// start为倒数第二个,结束到 34,但是不包含34,所以截取的是 3
var arr3 = arr2.slice(-2,4)
console.log(arr3); //[3]
// start为倒数第二个,结束包含34
var arr4 = arr2.slice(-2,5)
console.log(arr4); //[3, 34]
// 如果start为正数,当end为负数的时候
var arr2 = [23, 4, 42, 3, 34]
var arr3 = arr2.slice(2,-1)
console.log(arr3); //[42, 3]
七、splice()
- splice():很强大的数组方法,它有很多种用法,可以实现删除、插入和替换
- 插入:可以向指定位置插入任意数量的项,只需提供 3 个参数:起始位置、 0(要删除的项数)和要插入的项。例如,splice(2,0,4,6)会从当前数组的位置 2 开始插入4和6。
- 替换:可以向指定位置插入任意数量的项,且同时删除任意数量的项,只需指定 3 个参数:起始位置、要删除的项数和要插入的任意数量的项。插入的项数不必与删除的项数相等。例如,splice (2,1,4,6)会删除当前数组位置 2 的项,然后再从位置 2 开始插入4和6。
- 删除:可以删除任意数量的项,只需指定 2 个参数:要删除的第一项的位置和要删除的项数。例如, splice(0,2)会删除数组中的前两项
// 删除 -- 返回删除的元素 --原数组发生改变
var arr2 = [23, 4, 42, 3, 34];
var arr3 = arr2.splice(2,1);
console.log(arr3); //[42]
console.log(arr2); // [23, 4, 3, 34]
// 替换 --
var arr = ['zhansan', 'lisi', 'wangwu', 'lius'];
var arr2 = [23, 4, 42, 3, 34]
var arr3 = arr2.splice(2,1,4,34)
console.log(arr3); //[42]
console.log(arr2) // [23, 4, 4, 34, 3, 34]
// 插入 --
var arr2 = [23, 4, 42, 3, 34]
var arr3 = arr2.splice(2,0,4,34)
console.log(arr3); //[]
console.log(arr2) // [23, 4, 4, 34, 42, 3, 34]
八、indexOf和lastIndexOf
- indexOf():接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的开头(位置 0)开始向后查找。
- lastIndexOf:接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中, 从数组的末尾开始向前查找。
var arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); //2 -- 找到第一个就不会往下找,返回下标
console.log(arr.lastIndexOf(5)); //5
console.log(arr.indexOf(5,2)); //2
console.log(arr.lastIndexOf(5,4)); //2
console.log(arr.indexOf("5")); //-1
九、forEach
- forEach():对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身
var arr2 = [23, 4, 42, 3, 34]
arr2.forEach((item, index, a) => {
// item表示每个元素,index表示下标,a表示元数组
console.log(item) // 23 , 4 42 3 34
console.log(index) // 0 1 2 3 4
console.log(a) //[23, 4, 42, 3, 34]
})
十、map()
- array.map(function(currentValue,index,arr), thisValue)
- currentValue:必须。当前元素的值
- index:可选。当前元素的索引值
- arr:可选。当前元素属于的数组对象
- thisValue:可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。可改变this指向,
- map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
注意:map() 不会改变原始数组。map() 不会对空数组进行检测
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25]
十一、every和some
- come():判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true
- every():判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
// every
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.every(function(x) {
return x < 10;
});
console.log(arr2); //true
var arr3 = arr.every(function(x) {
return x < 3;
});
console.log(arr3); // false
// some
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.some(function(x) {
return x < 3;
});
console.log(arr2); //true
var arr3 = arr.some(function(x) {
return x < 1;
});
console.log(arr3); // false
十二、filter
- 该回调函数接受三个参数
- 第一个表示arr的某个元素。
- 第二个表示arr每一位的下标
- 第三个表示arr自身 常用 self表示
// 在一个数组中,删除偶数
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
console.log(r); // [1, 5, 9, 15]
// 删除数组中的空字符串
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim(); // 注:IE9(不包含IE9)以下的版本没有trim()方法
});
arr; // ['A', 'B', 'C']
// 数组去重
var arr = [7,6,5,214,5,9,7,80,3,6,45,48,46,24,26];
var a = arr.filter(function(x,item,arr){
return arr.indexOf(x) ===item;
})
console.log(a.toString())
十三、reduce()和reduceRight()
- 这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
- 这两个方法都接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值
- 传给 reduce()和 reduceRight()的函数接收 4 个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10);
console.log(sum); //25