每天学一点JavaScriipt实用知识

242 阅读1分钟

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))
//得[["小明", "小红"],["张三", "李四"],["王五", "赵六"]]