我接受了一次采访,我准备的一个问题是迭代地,递归地和使用apply来压扁数组。
我想出了一些不同的解决方案,但它们都是从另一个借用属性。我的迭代解决方案使用apply,我构建的两个递归的解决方案使用某种形式的迭代。
您觉得这些解决方案会被接受吗?如果不是,我怎么能改进它们以符合期望?
递归:
var flattenArrRecursive = arr => {
var flattened = [];
arr.forEach(item => {
if(Array.isArray(item)) {
flattened.push(...flattenArrRecursive(item));
//flattened.push.apply(flattened, flattenArrRecursive(item));
} else {
flattened.push(item);
}
})
return flattened;
}
迭代/申请:
var flattenArrIterative2 = arr => {
var result = [];
var todo = [arr];
while(todo.length) {
var current = todo.shift();
if(Array.isArray(current)) {
todo.unshift.apply(todo, current);
} else {
result.push(current);
}
}
return result;
}
你会接受这些作为问题的解决方案吗?
我也有这个递归函数,但我没有完全自己编写,也不想使用它。
var flattenArrRecursive = arr =>
//reduce runs if statement on each element, similar to forEach but removes element from original arr in the process
arr.reduce((a, b) =>
a.concat(Array.isArray(b) ? flattenArrRecursive(b): b), []
);