1.根据数组中某一字段进行排序
本题中是根据城市的字母(enValue字段)顺序进行排序。
var cityList=[
{"enValue": "shijiazhuang","key": 37,"sort": 0,"value": "石家庄市"},
{"enValue": "tangshan","key": 61,"sort": 0,"value": "唐山市"},
{"enValue": "qinhuangdao","key": 77,"sort": 0,"value": "秦皇岛市"}
]
本题考查:闭包、Array.prototype.sort
答案解析:
function letterSort(property){
return (a,b) => a[property] > b[property] ? 1 : -1;
}
使用:
let newArr = cityList.sort(letterSort('enValue'));
2.将一个多维数组进行扁平化
将数组扁平化的题目通常会伴随去重(flat)和排序(sort),在此只讲扁平化。
考查:Array.prototype.flat、闭包
let arr = [3,6,4,[1,6,[3,7,[2,3]]]]
arr.flat() //输出 [3, 6, 4, 1, 6, [ 3 , 7 , [ 2 , 3 ] ] ]
// 可知flat默认只会将数组降低一个维度
//那么我们将数组降低三个维度即可扁平化。
let newArr =[...new Set(arr.flat(3))]
// 得 [3, 6, 4, 1, 6, 3, 7, 2, 3]
此方法明显不是面试官想要的,我们大多数情况下不知道目标数组是几个维度,维度是变化的!!!所以flat基本没啥用。
正确应该如下:
function myFlat(arr){
let newArr = [];
function toPush(chilArr){
chilArr.forEach(v=>{
Array.isArray(v)?toPush(v):newArr.push(v);
})
}
toPush(arr)
return newArr;
}
验证:
let arr = ['e',['b',['c','d',['a','f']]]];
let newArr = myFlat(arr);
console.log(newArr)
//得 ["e", "b", "c", "d", "a", "f"]
3.分割小组
将班级里每x人分为一组。
巧用splice会改变原数组
const listChunk = (list, size = 1) => {
const tmp = [...list];
let newArr = [];
if (size <= 0) {
return newArr;
}
while (tmp.length) {
newArr.push(tmp.splice(0, size))
}
return newArr
}
//使用
let student= ['小明','小红','张三','李四','王五','赵六'];
console.log(listChunk(student,2))
//得[["小明", "小红"],["张三", "李四"],["王五", "赵六"]]