我有一个JavaScript数组,如:
[["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]]
如何将单独的内部数组合并为一个,例如:
["$6", "$12", "$25", ...]
我有一个JavaScript数组,如:
[["$6"], ["$12"], ["$25"], ["$25"], ["$18"], ["$22"], ["$10"]]
如何将单独的内部数组合并为一个,例如:
["$6", "$12", "$25", ...]
当前回答
我宁愿将整个数组按原样转换为字符串,但与其他答案不同,我会使用JSON.stringify而不使用toString()方法进行转换,这会产生不希望的结果。
有了JSON.stringify输出,剩下的就是删除所有括号,再次用开始和结束括号包装结果,并用JSON.parse提供结果,使字符串恢复“生命”。
可以处理无限嵌套数组,而无需任何速度成本。可以正确处理包含逗号的字符串的数组项。
var arr=[“abc”,[[[6],[“3,4”],“2”];var s=“[”+JSON.stringify(arr).replace(/\[|]/g,'')+“]”;var flatted=JSON.parse(s);console.log(展平)
仅适用于多维字符串/数字数组(非对象)
其他回答
我建议使用节省空间的发电机功能:
函数*展平(arr){如果(!Array.isArray(arr))产生arr;否则为(设arr的el)屈服*展平(el);}//示例:console.log(…flatten([1,[2,[3,[4]]]));//1 2 3 4
如果需要,请创建一个展平值数组,如下所示:
let flattened = [...flatten([1,[2,[3,[4]]]])]; // [1, 2, 3, 4]
如何使用JavaScript 1.8的reduce(callback[,initialValue])方法
list.reduce((p,n) => p.concat(n),[]);
能胜任这项工作。
我提出了两个没有递归的简短解决方案。从计算复杂性的角度来看,它们不是最优的,但在一般情况下工作良好:
let a = [1, [2, 3], [[4], 5, 6], 7, 8, [9, [[10]]]];
// Solution #1
while (a.find(x => Array.isArray(x)))
a = a.reduce((x, y) => x.concat(y), []);
// Solution #2
let i = a.findIndex(x => Array.isArray(x));
while (i > -1)
{
a.splice(i, 1, ...a[i]);
i = a.findIndex(x => Array.isArray(x));
}
这并不难,只需遍历数组并合并它们:
var result = [], input = [["$6"], ["$12"], ["$25"], ["$25"], ["$18"]];
for (var i = 0; i < input.length; ++i) {
result = result.concat(input[i]);
}
你可以使用Ramda JS flatten
var arr=[[1,2],[3],[4,5]];var flattedArray=R.flatten(arr);console.log(flattedArray)<script src=“https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js“></script>