总结前端面试JS常用的数组操作,如扁平化数组、数组去重、求数组最大值、数组求和、排序、对象和数组的转化等。。。
function flatten(arr){
while(arr.some(item=>Array.isArray(item))){
arr = [].concat(...arr)
}
return arr;
}
flatten([1,2,[3,4,[5]]]) //[ 1, 2, 3, 4, 5 ]
实质是利用递归和数组合并方法concat实现扁平。
[1,2,[3,4,[5]]].flat(1) //[ 1, 2, 3, 4, [ 5 ] ]
[1,2,[3,4,[5]]].flat(Infinity) //[ 1, 2, 3, 4, 5 ]
Array.prototype.distinct = function(){
const arr = this;
const len = arr.length;
const result = [];
for(let i =0;i
[...new Set([1,2,2,3,4,4])]
Array.from(new Set([1,2,2,3,4,4]))
Array.prototype.bubleSort= function(){
const arr = this;
const len = arr.length;
for(let i=0;iarr[j+1]){
let temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
[8,5,7,2].bubleSort() //[ 2, 5, 7, 8 ]
另一种冒泡排序:
Array.prototype.bubleSort= function(){
const arr = this;
const len = arr.length;
for(let i=len;i>1;i--){
for(let j=0;jarr[j+1]){
[arr[j],arr[j+1]]=[arr[j+1],arr[j]]
}
}
}
return arr;
}
[8,5,7,2].bubleSort() //[ 2, 5, 7, 8 ]
Array.prototype.selectSort = function(){
const arr = this;
const len = arr.length;
for(let i=0;iarr[j]){
[arr[i],arr[j]]=[arr[j],arr[i]]
}
}
}
return arr
}
[5,1,2,7,4].selectSort() //[ 1, 2, 4, 5, 7 ]
[1,5,2,3].sort() //[ 1, 2, 3, 5 ] 默认是升序
[1,5,2,3].sort((a,b)=>b-a) //[ 5, 3, 2, 1 ]
先排序,再取值
Array.prototype.selectSort = function(){
const arr = this;
const len = arr.length;
for(let i=0;iarr[j]){
[arr[i],arr[j]]=[arr[j],arr[i]]
}
}
}
return arr;
}
maxArray = function(array){
const len = array.length;
return array.selectSort()[len-1]
}
maxArray([1,3,9,2,5]) //9
Math.max(...[1,2,3,4]) //4
Math.max.apply(this,[1,2,3,4]) //4
[1,2,3,4].reduce((prev,cur)=>{
return Math.max(prev,cur)
},0) //4
function sum(arr){
const 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])
利用slice截取数组,再递归求和
[1,2,3,4].reduce((a,b)=> a+b) //10
[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,3].some(item=>{
return item===3
})
[1,2,3].indexOf(3) //2 如果存在返回索引,不存在返回-1
[1,2,3].includes(3) //true
[1,2,4,4,3].find(item=>item===3) //3 返回本身,如果不存在返回undefined
[1,2,4,4,3].findIndex(item=>item===3) //4 返回索引,如果不存在返回-1
Array.from(new Set([1,2,3,4])) //[nodemon] starting `node z.js`
[ 1, 2, 3, 4 ]
[1,2,3].map(()=>0) //[ 0, 0, 0 ]
[1,2,3].fill('a') //[ 'a', 'a', 'a' ]
[1,2,3].every(item=>item >2) //false
[1,2,3].some(item=>item>2) //true
[1,2,3].filter(item=>item>2) //[3]
Object.keys({name:'张三',age:14}) //[ 'name', 'age' ]
Object.values({name:'张三',age:14}) //[ '张三', 14 ]
Object.entries({name:'张三',age:14}) //[ [ 'name', '张三' ], [ 'age', 14 ] ]