You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript按rowId更新或新增数组对象功能异常如何解决

问题原因
  • 代码的核心问题是操作对象和返回对象不一致:调用find方法匹配元素时遍历的是原始入参数组anArray,修改的也是原始数组中的元素,但最后返回的是深拷贝得到的独立新数组arrayCopy,原始数组的修改不会同步到拷贝后的数组中,自然看不到更新效果。
  • 额外隐藏问题:现有写法会意外修改原始入参数组,不符合无副作用的函数设计预期。
修正后的代码
function replaceOrAdd(anObject, anArray) {
    if (anObject == null) {
        return JSON.parse(JSON.stringify(anArray));
    }
    let arrayCopy = JSON.parse(JSON.stringify(anArray));
    // 改为从拷贝后的数组中查找匹配元素
    let found = arrayCopy.find(s => s.rowId === anObject.rowId);
    if (found) {
        Object.assign(found, anObject);
    } else {
        arrayCopy.push(anObject);
    }
    return arrayCopy;
}
验证效果

使用示例参数调用修正后的函数,返回结果和预期完全一致:

var anArray = [
 {rowId:0, a:0, b:5, c:2},
 {rowId:1, a:12, b:7, c:2.5}
];
var anObject= {rowId:1, b:9999};
var result = replaceOrAdd(anObject, anArray);
// 输出:
// [
//   {rowId:0, a:0, b:5, c:2},
//   {rowId:1, a:12, b:9999, c:2.5}
// ]

内容的提问来源于stack exchange,提问作者NickJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:57:01