前端面试题手记

数组去重

题目

// 输入数据
const input =  [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

// 输出数据
expect =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] 

// 附加条件 最好不要超过五行

正确答案

//    第一种
const ary = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]
console.log('ary', [... new Set(ary.flat(Infinity))].sort((a, b) => a - b))
//    第二种
const flatten = input => {
    result = []
    input.forEach(v => Array.isArray(v) ? result = result.concat(flatten(v)) : result.push(v))
    return result
}
//    第三种
const flatten = input => input.reduce((prev, next) => prev.concat(Array.isArray(next) ? flatten(next) : next), []);
//    第四种
const flatten = input => {
    while(input.some(v => Array.isArray(v))){
        input = [].concat(...input)
    }
    return input
}

地狱回调

function fn1 (name){
	console.log(1)
	return name;
}
function fn2 (name){
	console.log(2)
	return name;
}
function fn3 (name){
	console.log(3)
	return name;
}
function reduces (...fns){
	if(!fns.length){
		return arg => arg;
	}
	if(fns.length === 1){
		return fns[0];
	}
	return fns.reduce((currentFn,nextFn) => (...arg) => currentFn(nextFn(...arg)));
}
let abc = reduces(fn1,fn2,fn3)("欧米伽");
console.log(abc);
原文地址:https://www.cnblogs.com/aaron---blog/p/10837307.html