本文摘自PHP中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于JavaScript常用数组操作的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。在日常的开发中离不开前端对数据的处理,在这里整理下ES6/ES7/ES8...新的数组api。
扁平化n维数组
Array.flat() -- ES10
方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。Array.flat(n)是扁平数组的api,n表示维度,n值为Infinity时维度为无限大
1 2 3 4 | [1,[2,3]].flat(2)
[1,[2,3,[4,5]].flat(3)
[1,[2,3,[4,5]]].toString()
[1,[2,3,[4,5],[...]]].flat(Infinity)
|
flat() 方法会移除数组中的空项:
1 2 | var arr4 = [1, 2, , 4, 5];
arr4.flat();
|
替换方案:实质是利用递归和数组合并方法concat实现扁平
1 2 3 4 5 6 7 8 | function flatten(arr) {
while (arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
flatten([1,[2,3]])
flatten([1,[2,3,[4,5]])
|
Array.from()方法从一个类似数组或可迭代对象中创建一个新的数组实例。
from 与 set 使用,数组去重;set是ES6新出来的一种一种定义不重复数组的数据类型,Array.from是将类数组转化为数组。
1 2 | Array.from( new Set([1,2,3,3,4,4]))
[... new Set([1,2,3,3,4,4])]
|
替换方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Array.prototype.distinct = function (){
var arr = this,
result = [],
i,
j,
len = arr.length;
for (i = 0; i < len; i++){
for (j = i + 1; j < len; j++){
if (arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
[1,2,3,3,4,4].distinct();
|
数组去重合并
1 2 3 4 5 6 | function combine(){
let arr = [].concat.apply([], arguments);
return Array.from( new Set(arr));
}
var m = [1, 2, 2], n = [2,3,3];
console.log(combine(m,n));
|
排序Array.sort()
1 2 | [1,2,3,4].sort((a, b) => a - b);
[1,2,3,4].sort((a, b) => b - a);
|
替换方案:升序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Array.prototype.bubleSort= function () {
let arr=this,
len = arr.length;
for (let outer = len; outer >= 2; outer--) {
for (let inner = 0; inner <= outer - 1; inner++) {
if (arr[inner] > arr[inner + 1]) {
[arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]];
}
}
}
return arr;
}
[1,2,3,4].bubleSort();
|
求数组中最大值Math.max()
返回给定的一组数字中的最大值。如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN。
1 2 3 4 5 | Math.max(...[1,2,3,4])
Math.max.apply(this,[1,2,3,4])
[1,2,3,4].reduce( (prev, cur,curIndex,arr)=> {
return Math.max(prev,cur);
},0)
|
Math.max()是Math对象内置的方法,参数是字符串;
reduce是ES5的数组api,参数有函数和默认初始值;
函数有四个参数,pre(上一次的返回值),cur(当前值),curIndex(当前值索引),arr(当前数组)
求和 reduce
1 2 3 | [1,2,3,4].reduce( function (prev, cur) {
return prev + cur;
},0)
|
替换方案:求和,利用slice截取改变数组,再利用递归求和
1 2 3 4 5 6 7 8 9 10 11 | function sum(arr) {
var len = arr.length;
if (len == 0){
return 0;
} else if (len == 1){
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
sum([1,2,3,4]);
|
合并concat
concat()方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
1 2 3 4 5 | [1,2,3,4].concat([5,6])
[...[1,2,3,4],...[4,5]]
Array.prototype.push.apply( [ 'parsnip' , 'potato' ], [ 'celery' , 'beetroot' ]);
console.log(vegetables);
|
替换方案:
1 2 3 4 | let arr=[1,2,3,4];
[5,6].map(item=>{
arr.push(item)
})
|
判断是否包含值
includes(),find(),findIndex()是ES6的api
1 2 3 4 | [1,2,3].includes(4)
[1,2,3].indexOf(4)
[1, 2, 3].find((item)=>item===3)
[1, 2, 3].findIndex((item)=>item===3)
|
替换方案:
1 2 3 | [1,2,3].some(item=>{
return item===3
})
|
类数组转化 Array.from() ― ES6
类数组:具有长度的属性,但是属性是非负整数。它不具有数组的一些方法,但是不意味着它不能使用数组的方法。
比如:document.getElementsByTagName('p')返回的值为类数组
call,apply:是改变slice里面的this指向arguments,所以arguments也可调用数组的方法
Array.from是将类似数组或可迭代对象创建为数组
数组对象中slice()方法是在不操作原数组的基础上切割数组,可以称之为浅拷贝
1 2 3 4 5 6 7 8 9 10 | var a={
0: "aa" ,
1: "cc" ,
2: "dd" ,
length:3
}
var callArr = Array.prototype.slice.call(a);
var applyArr = Array.prototype.slice.apply(a)
var fromArr = Array.from(a)
console.log(a,callArr, applyArr, fromArr);
|
Array.prototype.slice理解:
1 2 3 4 5 6 7 8 9 | Array.prototype.slice = function (start, end ){
var result = new Array();
start = start || 0;
end = end || this.length;
for ( var i = start; i < end ; i++){
result.push(this[i]);
}
return result;
}
|
循环 fill -- ES6
1 2 | [1,2,3].fill(1)
[1,2,3].map(()=>0)
|
every -- ES5;每一项是否都满足条件,返回布尔值
1 | [1,2,3].every(item=>{ return item>2})
|
some 只要有一项满足,返回布尔值
1 | [1,2,3].some (item=>{ return item>2})
|
过滤数组 filter -- ES5
方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
1 | [1,2,3].filter(item=>{ return item >=2 });
|
对象和数组转化keys,values,entries,
fromEntries
1 2 3 4 | Object.keys({name: '张三' ,age:14})
Object.values({name: '张三' ,age:14})
Object.entries({name: '张三' ,age:14})
Object.fromEntries([name, '张三' ],[age,14])
|
new Map() 构造函数接受一个可迭代的entries。借助Object.entries方法你可以很容易的将Object转换为Map:
1 2 3 | var obj = { foo: "bar" , baz: 42 };
var map = new Map(Object.entries(obj));
console.log(map);
|
【相关推荐:JavaScript视频教程】
以上就是JavaScript常用数组操作的介绍(代码示例)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
javascript中数组如何求和?常用方法介绍
10个实用的es6方法,快来收藏!
javascript怎么删除数组的指定元素
javascript知识点总结之 函数与事件
javascript操作dom的方法有哪些?
javascript中的alert()是什么
javascript字符串截取方法有哪些?
javascript怎么验证是否为数字
javascript 构造函数和 "new" 操作符详解
javascript怎么判断是否是字符
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » JavaScript常用数组操作的介绍(代码示例)