基于不带.concat的索引合并JavaScript数组
我正在尝试组合两个数组,大多数答案都与将第二个数组添加到第一个数组的末尾有关。我需要将索引合并到一个索引 下面是示例代码:基于不带.concat的索引合并JavaScript数组,javascript,arrays,Javascript,Arrays,我正在尝试组合两个数组,大多数答案都与将第二个数组添加到第一个数组的末尾有关。我需要将索引合并到一个索引 下面是示例代码: 让arr1=[‘高尔夫’、‘曲棍球’、‘网球’]; 设arr2=['player1','player2','player3']; Array.prototype.zip=函数(arr){ 返回此.map(函数(e,i){ 返回[e,arr[i]; }) }; const arr3=arr1.zip(arr2); 控制台日志(arr3).map将一个数组一对一映射到另一个数
让arr1=[‘高尔夫’、‘曲棍球’、‘网球’];
设arr2=['player1','player2','player3'];
Array.prototype.zip=函数(arr){
返回此.map(函数(e,i){
返回[e,arr[i];
})
};
const arr3=arr1.zip(arr2);
控制台日志(arr3)
.map
将一个数组一对一映射到另一个数组:如果原始数组中有3个元素,.map
只能生成另一个包含3个元素的数组。如果不能使用concat
,请使用.reduce
而不是.map
,这样可以在一次迭代中推送多个元素:
const arr1=[‘高尔夫’、‘曲棍球’、‘网球’];
常量arr2=['player1','player2','player3']
Array.prototype.zip=函数(otherArr){
返回此。减少((累计,项目,i)=>{
累计推力(项);
累计推力(其他推力[i]);
返回累计;
}, []);
};
常量arr3=arr1.zip(arr2)
console.log(arr3)
您可以使用.reduce()
压缩两个数组:
让arr1=[“高尔夫”、“曲棍球”、“网球”],
arr2=['player1','player2','player3'];
设zip=(a1,a2)=>a1.reduce((a,c,i)=>(a.push(c,a2[i]),a),[]);
log(zip(arr1,arr2))代码>您可以使用临时数组而不是直接输入法
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)
一个简单的解决方案:
只需使用一个简单的reduce()将您现在拥有的内容展平:
这种方法保留了您所拥有的,并且不会增加很多复杂性,比如额外的方法调用、临时数组等;这就是功能性方法的美妙之处:你离你需要的东西只有一个链环。我也会将其转换为一种独立的方法,而不是修改原型,但这不是重点…请不要对内置对象进行变异。好的,只是补充一下-我需要的最终结果是['golf'、'player1'、'曲棍球'、'player2'、'tennis'、'player3']哦,它看起来更干净。谢谢。我意识到我给出了错误的示例对象,这严重影响了结果。所以我认为这个答案是正确的,因为这是根据我给出的错误信息给出的第一个答案。我在这里写了一个关于stackoverflow链接的新问题-
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)