我试图合并两个数组,大部分答案都与将第二个数组添加到第一个数组的末尾有关。我需要将索引合并到索引。
以下是示例代码:
let arr1 = ['golf', 'hockey', 'tennis'];
let arr2 = ['player1', 'player2', 'player3'];
Array.prototype.zip = function (arr) {
return this.map(function (e, i) {
return [ e, arr[i]];
})
};
const arr3 = arr1.zip(arr2);
console.log(arr3);

结果应为:
['golf', 'player1', 'hockey', 'player2', 'tennis', 'player3']
上面的代码看起来应该可行,但不是。如果它可以修复,或交换更好,那就太好了.....
答案 0 :(得分:3)
您可以使用.reduce()
压缩两个数组:
let arr1 = ['golf', 'hockey', 'tennis'],
arr2 = ['player1', 'player2', 'player3'];
let zip = (a1, a2) => a1.reduce((a, c, i) => (a.push(c, a2[i]), a), []);
console.log(zip(arr1, arr2));
<强>文档:强>
答案 1 :(得分:0)
.map
将数组映射到另一个数组一对一:如果原始数组中有3个元素,.map
只能生成另一个数组3个要素。如果您无法使用concat
,请使用.reduce
代替.map
,这样您就可以在一次迭代中推送多个元素:
const arr1 = ['golf', 'hockey', 'tennis'];
const arr2 = ['player1', 'player2', 'player3']
Array.prototype.zip = function (otherArr) {
return this.reduce((accum, item, i) => {
accum.push(item);
accum.push(otherArr[i]);
return accum;
}, []);
};
const arr3 = arr1.zip(arr2)
console.log(arr3)
&#13;
当然,最好不要更改内置的Array对象。您可以通过使用独立函数来轻松避免这种情况:
const arr1 = ['golf', 'hockey', 'tennis'];
const arr2 = ['player1', 'player2', 'player3']
function zip(arr1, arr2) {
return arr1.reduce((accum, item, i) => {
accum.push(item);
accum.push(arr2[i]);
return accum;
}, []);
};
const arr3 = zip(arr1, arr2);
console.log(arr3);
&#13;
答案 2 :(得分:0)
您可以使用临时数组而不是直接输入法。
let arr1 = ['golf', 'hockey', 'tennis'];
let arr2 = ['player1', 'player2', 'player3']
Array.prototype.zip = function (arr) {
this.map(function (e, i) { this.splice(i*2+1, 0, arr[i]); }, this )
};
const arr3 = arr1.zip(arr2)
console.log(arr3)
答案 3 :(得分:0)
一个简单的修复: 只需使用简单的reduce()来展平你现在所拥有的东西:
let arr1 = ['golf', 'hockey', 'tennis'];
let arr2 = ['player1', 'player2', 'player3']
Array.prototype.zip = function (arr) {
return this.map(function (e, i) {
return [ e, arr[i]]
}).reduce((a,b)=>a.concat(b)); // blink and you miss the change...
};
const arr3 = arr1.zip(arr2)
console.log(arr3)
这种方法可以保留你所拥有的,并且不会增加很多复杂性,如额外的方法调用,临时数组等;这是功能性方法的美妙之处:你是一个远离你需要的链条。我也会将它转换为一种独立的方法,而不是修改原型,但是除了这一点......