前言:
此刻看官们对“js数组和伪数组”大致比较注重,兄弟们都想要知道一些“js数组和伪数组”的相关文章。那么小编也在网上汇集了一些有关“js数组和伪数组””的相关资讯,希望小伙伴们能喜欢,咱们一起来了解一下吧!本文只要讲述一行代码扁平化n维数组、数组去重、求数组最大值、数组求和、排序、对象和数组的转化等
注:轻奢版就是便捷的实现方法,原始版是这个方法还没有出现之前是怎么实现的(只列举了前两个)
扁平化n维数组
轻奢版
[1,[2,3]].flat(2) //[1,2,3][1,[2,3,[4,5]]].flat(3) //[1,2,3,4,5][1,[2,3,[4,5,[6]]]].flat(Infinity) //[1,2,3,4,5,6]
Array.flat(n)是扁平数组的api, n表示维度, n值为 Infinity时维度为无限大。
原始版
function flatten(arr){ while(arr.some(item=>Array.isArray(item))){ arr = [].concat(...arr) } return arr;}flatten([1,[2,3]]);//[1, 2, 3]flatten([1,[2,3,[4,5]]]);//[1, 2, 3, 4, 5]
实质是利用递归和数组合并方法,concat实现扁平
去重
轻奢版
Array.from(new Set([1,2,3,4,3,2,1]));//[1, 2, 3, 4][...new Set([1,2,3,4,3,2,1])];//[1, 2, 3, 4]
set是ES6新出来的一种定义不重复数组的数据类型。
Array.from是将类数组转化为数组。
...是扩展运算符,将set里面的值转化为字符串。
原始版
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,4,3,1,2,3,5].distinct();//[4, 1, 2, 3, 5]
取新数组存值,循环两个数组相比较
排序
[1,2,4,3,0].sort();//[0, 1, 2, 3, 4] 默认升序[1,2,4,3,0].sort((a,b)=>b-a);//[4, 3, 2, 1, 0] 降序
sort是js内置的排序方法,参数为一个函数
最大值
Math.max(...[1,2,3,4]);//4Math.max.apply(this,[1,2,3,4]);//4[1,2,3,4].reduce((prev,cur,curIndex,arr) => { return Math.max(prev,cur)},0);//4
Math.max()是Math对象内置的方法,参数是字符串
reduce是ES5的数组api,参数有函数和默认初始值
函数有四个参数:
pre :上一次的返回值cur :当前值curIndex :当前值索引arr:当前数组
求和
[1,2,3,4,5].reduce(function(prev,cur){ return prev + cur;},0); // 15
合并
[1,2,3,4].concat([5,6]);//[1, 2, 3, 4, 5, 6][...[1,2,3,4],...[5,6]];//[1, 2, 3, 4, 5, 6]
判断是否包含值
[1,2,4].includes(3);//false[1,2,4].indexOf(3);//-1 如果存在返回索引[1,2,4].find((item)=>item===2);//2 如果数组中无值返回undefined[1,2,4].findIndex((item)=>item===1);//0 如果数组中无值返回-1
类(伪)数组转化
Array.prototype.slice.call(arguments);//arguments是类数组(伪数组)Array.prototype.slice.apply(arguments);Array.from(arguments);[...arguments]
类(伪)数组:表示length属性,但是不具备数组的方法
call,apply:改变slice里面的this只想arguments,所以arguments也可调用数组的方法
Array.from:将类似数组或可迭代对象创建为数组
...:将类数组拓展为字符串,再定义为数组
每一项都设置值
[1,2,3,4].fill(false);//[false, false, false, false]
每一项是否满足
[1,2,3,4].every(item => {return item > 2});//false
有一项满足
[1,2,3,4].some(item => {return item > 2});//true
过滤数组
[1,2,3].filter(item=>{return item>2});//[3]
对象和数组转化
Object.keys({name:"张三",age:10});//["name", "age"]Object.values({name:"张三",age:10});//["张三", 10]Object.entries({name:"张三",age:10});//[["name", "张三"], ["age", 10]]
标签: #js数组和伪数组