我有两个数组:
a = [
[a, b],
[c, d],
[e, f],
[g, h]
]
b = [
[a, 4],
[1, 2],
[e, 3]
]
当a[i][0]
匹配b[i][0]
时,我需要为a的当前索引添加一个值。对于此示例,当a[0][1]
与b[0][1]
匹配时,a[0][1]
应该看起来像[a,b,new_value]
。
如果这意味着要创建一个包含a
所有值的新数组,那很好,但a
的原始值和顺序不能更改。
我尝试过for循环和for循环的多种变体。我很茫然。
提前致谢。
答案 0 :(得分:3)
地图+找不错。对于a
数组的每个项目,查看b
数组中是否存在匹配元素,如果是,请添加新值:
const a = [
["a","b"],
["c","d"],
["e","f"],
["g","h"],
];
const b = [
["a",4],
[1,2],
["e",3],
];
const mapped = a.map(x => {
const match = b.find(y => y[0] === x[0]);
if (match) return [...x, "new value"] // Replace "new value" with whatever you want to add...
return x;
});
console.log(mapped)
答案 1 :(得分:2)
使用Array#map迭代第一个数组。将每个子数组的第1项与同一索引处的第2个数组中的子数组进行比较。如果它们匹配,concat从第一个数组到子数组的值,并返回它。如果没有,则返回子数组。
注意: concat和map创建新数组,不要更改原始数据。
var a = [["a","b"],["c","d"],["e","f"],["g","h"]];
var b = [["a",4],[1,2],["e",3]];
var result = a.map(function(item, i) {
return b[i] && item[0] === b[i][0] ? item.concat(b[i][1]) : item; // replace b[i][1] with whatever value you want to add
});
console.log(result);
答案 2 :(得分:0)
如果给定数组的长度不同,您可以使用默认值映射检查结果。
var array1 = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']],
array2 = [['a', 4], [1, 2], ['e', 3]],
result = array1.map((a, i) => a.concat(a[0] === (array2[i] || [])[0] ? array2[i][1] : []));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }