我已经看到关于flattening arrays one level的这个不成功的问题。不确定此查询是否属于同一个洞。我想知道这对于一系列坐标是否可行。 e.g。
var arraysections = [[
[480, 200],
[580, 400],
[680, 100]
],
[[680, 100],
[180, 300],
[280, 100],
[380, 400]
]];
成为..
var singlearray = [
[480, 200],
[580, 400],
[680, 100],
[680, 100],
[180, 300],
[280, 100],
[380, 400]
];
我需要arraysections
用于个别路径,singlearray
用于完整的点列表。感谢任何提示。
答案 0 :(得分:4)
它仍然是一样的。您可以使用concat
合并多个数组。你可以通过循环遍历对象来手动完成:
var singlearray = [];
for (var i = 0; i < arraysections.length; i++) {
singlearray = singlearray.concat(arraysections[i]);
}
或者使用apply
:
var singlearray = Array.prototype.concat.apply([], arraysections);
后者的工作原理是基本上调用[].concat(arraysections[0], arraysections[1], ...)
。 apply
的第一个参数是您使用的数组对象this
(这里的空数组很好),第二个参数是传递给concat
的参数数组。由于concat可以同时组合多个数组,而arraysections
已经是一个数组数组,所以我们很高兴来到这里。
答案 1 :(得分:2)
这很简单,您只需执行以下操作:
var singlearray = [].concat.apply([], arraysections);
这允许将所有内容传递到concat而不迭代 arraysections 。
答案 2 :(得分:1)
优化@ poke的答案。使用reduce(),即
,优化对for循环的需求
var arraysections = [[
[480, 200],
[580, 400],
[680, 100]
],
[[680, 100],
[180, 300],
[280, 100],
[380, 400]
]];
var singlearray = arraysections.reduce( function(p, c) {
return p.concat(c);
} );
console.log(singlearray);
或者,请考虑使用forEach()以较便宜的concat()电话取代昂贵的push()电话:
var arraysections = [[
[480, 200],
[580, 400],
[680, 100]
],
[[680, 100],
[180, 300],
[280, 100],
[380, 400]
]];
var singlearray = [ ];
arraysections.forEach(function(e) {
Array.prototype.push.apply(singlearray, e);
} );
console.log(singlearray);