如何用另一数组的值更新数组指定字段(JavaScript)
解决方案
你当前的代码逻辑其实没问题,但存在两个可以优化的点:一是每次遍历都调用find会重复查找,效率不高;二是如果array2里不存在某个Name,会导致bla为undefined,访问bla.col2会报错。
因为你提到array2里同一Name对应的col2值都一致,我们可以先把array2转换成一个Name到col2值的映射对象,这样后续更新时直接取值就行,不用反复查找:
// 先构建Name和col2的映射 const nameToCol2 = {}; array2.forEach(item => { // 同一Name值相同,直接覆盖也不影响结果 nameToCol2[item.Name] = item.col2; }); // 遍历array1更新col3 array1.forEach(item => { // 先判断映射里存在该Name再赋值,避免报错 if (nameToCol2.hasOwnProperty(item.Name)) { item.col3 = nameToCol2[item.Name]; } // 若需要处理无匹配Name的情况,可添加else逻辑,比如保留原col3或设默认值 // else { // item.col3 = item.col3 || 0; // } });
如果你想沿用自己最初的写法,只需加个判断避免报错即可:
array1.forEach((x) => { const bla = array2.find((y) => y.Name === x.Name); // 确认找到对应项后再赋值 if (bla) { x.col3 = bla.col2; } });
另外注意你代码里的引号是中文的‘’,实际运行时要改成英文的''或"",否则会触发语法错误。比如把{ Name: ‘Bart’, ... }改成{ Name: 'Bart', ... }。
内容的提问来源于stack exchange,提问作者Peter Double U
相关产品推荐
相关产品推荐

