有两个数组,第一个有三个元素,第二个有十二个,如下:
array_foo = ['a','b','c'];
array_bar = ['1','2','3','4','5','6','7','8','9','10','11','12'];
我想合并它们,并将a
放在4
后面,将b
放在8
后面,将c
放在12
后面,是:
array_result=['1','2','3','4','a','5','6','7','8','b','9','10','11','12','c'];
如何使用Javascript进行操作?
更新
我不确定下面是好的,还有更好的答案吗?
array_bar.forEach((item, index) => {
let array_foo_first = array_foo.slice(0, 4 * (index + 1) + index);
let array_foo_last = array_foo.slice(4 * (index + 1) + index);
array_foo = [
...array_foo_first,
item,
...array_foo_last
]
});
答案 0 :(得分:1)
我觉得相当简单,你只需要扩展一个for
循环:
array_foo=['a','b','c'];
array_bar=['1','2','3','4','5','6','7','8','9','10','11','12'];
for (let i = 4,j=0; i<array_bar.length; i+=4,j++) {
array_bar.splice(i+j, 0, array_foo[j]);
}
array_bar = array_bar.join();
console.log(array_bar);
&#13;
循环的快速解释:
您不仅要拥有一个索引,而是跟踪i
的两个array_bar
和j
的{{1}}。您每次将array_foo
增加4,并i
增加1,因为您希望它们像这样(4:1)间隔开。
i
for (let i = 4,j=0; i<array_bar.length; i+=4,j++)
让我们在给定的位置插入一个元素,在这里我们在splice
插入元素i+j
,4+0
和{{1 },总是来自8+1
的4个元素
12+2
答案 1 :(得分:0)
如果模式由array_foo的4 array_bar 1表示。 然后我会做一个小循环来完成它。
此循环基于array_bar
希望这会有所帮助:&gt;
var array_foo=['a','b','c'];
var array_bar=['1','2','3','4','5','6','7','8','9','10','11','12'];
var array_new = [];
array_bar.forEach((el,i)=>{
if((i)%4==0 && i!=0)
array_new.push(array_foo[(i/4)-1])
array_new.push(el);
})
array_new.push(array_foo[array_foo.length-1]);
console.log(array_new)
&#13;
答案 2 :(得分:0)
.forEach()
您可以循环遍历foo
数组,并为每个元素连接bar
的4个元素块与当前元素foo
,然后将结果连接到包含res
的{{1}}所有以前的块。
foo = ['a','b','c'];
bar = ['1','2','3','4','5','6','7','8','9','10','11','12'];
res = [];
foo.forEach((e,i) => { res = res.concat(bar.slice(4*i,4*i+4)).concat(e) } );
console.log(res)
&#13;
.map()
我们可以使用.map
取代相同的结果:
[].concat.apply([], foo.map((e,i) => bar.slice(4*i,4*i+4).concat(e)))
所以我在这里映射foo
如下:
foo[i] <- [bar[4*i], bar[4*i+1], bar[4*i+2], bar[4*i+3], foo[i]] (pseudocode!)
然后我将所有数组连接成一个:[].concat.apply([], arrayOfArrays)
foo = ['a','b','c'];
bar = ['1','2','3','4','5','6','7','8','9','10','11','12'];
res = [].concat.apply([], foo.map((e,i) => bar.slice(4*i,4*i+4).concat(e)));
console.log(res)
&#13;
.concat
.concat
方法(在前两个版本中使用)创建一个新数组。如果您正在寻找仍使用.map
的其他解决方案,请点击此处:
foo.map((e,i) => res.push(...bar.slice(i*4, i*4+4), foo[i]));
我们不是连接数组,而是为bar
的每个元素推送foo
个元素,其元素为foo
。我还使用destructuring assignment语法将块解包到传递给.push
的参数中。
foo = ['a','b','c'];
bar = ['1','2','3','4','5','6','7','8','9','10','11','12'];
res = [];
foo.map((e,i) => res.push(...bar.slice(i*4, i*4+4), foo[i]));
console.log(res)
&#13;