第一题:展平
直接利用reduce的聚合操作即可。
let arr = [[0, 1, 3, 4], [2, 3, 4 ,5], [4, 5, 6, 7, 8 ]]
let flatten = arr.reduce((prev, cur) => { return prev.concat(cur)}, []);
第二题:你自己的循环
let loop = (val, test, update, operation) => {
while(test(val)) {
operation(val);
val = update(val);
}
};
第三题:全都
实现every函数,分为循环版本和some方法版本。
循环版本:
function every(array, predicate) {
for(let e of array) {
if(!predicate(e)) return false;
}
return true;
};
some方法版本:
function every2(array, predicate) {
return !array.some(e => !predicate(e));
};
第四题:主要书写方式
直接CV书上的函数即可:
function dominantDirection(text) {
let counted = countBy(text, char => {
let script = characterScript(char.codePointAt(0));
return script ? script.direction : "none";
}).filter(({name}) => name != "none");
if (counted.length == 0) return "ltr";
return counted.reduce((a, b) => a.count > b.count ? a : b).name;
}