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

如何用structuredClone复制对象时跳过指定属性且不损坏源对象?

实现带跳过指定属性的结构化克隆

可以用临时移走原对象里不需要复制的属性、克隆完再复原的方式搞定,具体操作如下:

  • 先从原对象里找出要跳过的属性对应的键名(毕竟你手里只有属性值,得反向找对应的键)

    const skipValues = [obj.x, obj.y];
    const skippedKeys = [];
    for (const key in obj) {
      if (skipValues.includes(obj[key])) {
        skippedKeys.push(key);
      }
    }
    
  • 临时存好这些属性的值,然后从原对象里删掉它们

    const tempValues = {};
    skippedKeys.forEach(key => {
      tempValues[key] = obj[key];
      delete obj[key];
    });
    
  • 克隆剩下的对象部分

    const newObj = structuredClone(obj);
    
  • 把原对象的属性复原,同时给新对象的对应属性设好初始状态(方便后续加载新数据)

    skippedKeys.forEach(key => {
      obj[key] = tempValues[key];
      // 这里初始值可以换成你需要的,比如空对象、空数组都行
      newObj[key] = null;
    });
    

这样既不会弄坏原对象,也不用手动列全所有属性,只需要传入要跳过的属性值就能实现你要的效果。

另外提一句:如果原对象里有多个属性指向同一个大对象(比如obj.a和obj.b都是同一个大数组),这种方法会把所有匹配到的属性都跳过。要是你只想跳过特定的几个键,直接传键名数组(比如['x','y'])会更准确,这样第一步找键的操作就能省掉了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:05