假设我有一个数组:[['TEST1'], ['TEST2'], ['TEST3'], ['TEST4'], ['TEST5']]
我想将所有元素移动到数组的“顶层”,所以最终会这样:
['TEST1', 'TEST2', 'TEST3', 'TEST4', 'TEST5']
下面我有几个模型,但我想知道推荐的路线是什么。
var test = [['TEST1'], ['TEST2'], ['TEST3'], ['TEST4'], ['TEST5']];
var testarr = [];
test.forEach(function(e){
testarr.push(e[0]);
})
console.log(testarr);
或者
var test = [['TEST1'], ['TEST2'], ['TEST3'], ['TEST4'], ['TEST5']];
for (i = 0; n = test.length, i < n; i++){
test[i] = test[i][0]
}
console.log(test);
两者的输出:
[ 'TEST1', 'TEST2', 'TEST3', 'TEST4', 'TEST5' ]
答案 0 :(得分:3)
答案 1 :(得分:1)
第一种方法更清洁,并且没有开辟在第二种方法中使用计数器可能会出现的错误的可能性。这是.forEach()
优于带有数组的传统计数循环的确切原因。
话虽如此,更好的方法是使用 .map()
,因为这与.forEach()
非常相似,但会返回一个新数组,从而省去了明确的麻烦声明一个并删除push()
到原始数组的右索引的需要:
var test = [['TEST1'], ['TEST2'], ['TEST3'], ['TEST4'], ['TEST5']];
var testarr = test.map(e => { return e[0]; } );
console.log(testarr);
答案 2 :(得分:1)
您要寻找的是阵列展平,可以通过以下方式完成:
routes/web.php
答案 3 :(得分:1)
我坚持第一种方法。它更简洁,更不容易失败。如果你不知道它应该做什么,第二个有点难以理解。
话虽如此,如果您不仅仅是为了学习并实际计划将此代码用于某些事情,我建议您使用this线程中的一个建议解决方案。我挑选的垃圾:
var out = test.map(function (el) {
return el[0];
});
答案 4 :(得分:1)
您可以在es6环境中使用reduce或destruct它
let test = [['TEST1'], ['TEST2'], ['TEST3'], ['TEST4'], ['TEST5']];
console.log(test.reduce((a,b) => a.concat(b), []));
console.log([].concat(...test));
如果你有一个多维数组,你可以使用
const flat = e => e.reduce(
(a, b) => a.concat(Array.isArray(b) ? flat(b) : b), []
);
答案 5 :(得分:1)
对于要在不同阵列中更改数组的情况,作业的工具是map
函数而不是forEach
。它更干净,因为您之前不需要额外的变量声明,并且您可以在其中使用较差的函数。
var testarr = test.map(function(e){
return e[0];
});
forEach
函数的目的是遍历数组,而不是更改它。这种循环可以用于做副作用,但在这种特殊情况下,你不需要副作用,但两个数组之间的转换是干净的和差的,并且使用map
。
答案 6 :(得分:0)
您可以尝试以下方法
const input = [
['TEST1'],
['TEST2'],
['TEST3'],
['TEST4'],
['TEST5']
]
function flattenDeep(input) {
return input.reduce((accu, val) => Array.isArray(val) ? accu.concat(flattenDeep(val)):accu.concat(val), []);
}
console.log(flattenDeep(input));