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

如何在对象中存储属性与数组,新增属性时同步更新内部keys数组?

单个对象同步更新属性与内部数组的实现方案

我们需要实现向对象新增keyN格式的属性时,自动将新增的键名同步到对象内部的keys数组中,不需要手动维护数组内容。

方案1:使用Proxy代理(最便捷,无侵入式操作)

Proxy可以拦截对象的属性写入操作,自动判断是否需要更新keys数组,后续直接给对象赋值新属性即可自动同步:

const obj = {
  key1: 1,
  key2: 2,
  key3: 3,
  keys: ['key1', 'key2', 'key3']
};

// 生成代理对象,后续所有操作都用proxyObj
const proxyObj = new Proxy(obj, {
  set(target, prop, value) {
    // 只处理key+数字格式的新增属性,跳过keys数组本身的修改
    if (/^key\d+$/.test(prop) && !target.hasOwnProperty(prop)) {
      target.keys.push(prop);
    }
    target[prop] = value;
    return true;
  }
});

// 测试:直接赋值即可自动同步
proxyObj.key4 = 4;
proxyObj.key5 = 5;
proxyObj.key6 = 6;

console.log(proxyObj.keys); // 输出:['key1', 'key2', 'key3', 'key4', 'key5', 'key6']

这种方式的优势是后续操作和普通对象完全一致,不需要额外调用方法,符合无感知同步的要求。


方案2:封装专用新增方法(兼容性好,逻辑直观)

如果需要兼容不支持Proxy的老旧环境,可以封装统一的新增属性方法,所有新增操作都调用该方法实现同步:

const obj = {
  key1: 1,
  key2: 2,
  key3: 3,
  keys: ['key1', 'key2', 'key3'],
  // 新增属性的专用方法
  addKey(value) {
    const nextIndex = this.keys.length + 1;
    const newKey = `key${nextIndex}`;
    this[newKey] = value;
    this.keys.push(newKey);
    return newKey;
  }
};

// 测试:调用addKey方法新增
obj.addKey(4);
obj.addKey(5);
obj.addKey(6);

console.log(obj.keys); // 输出:['key1', 'key2', 'key3', 'key4', 'key5', 'key6']

这种方式逻辑简单易懂,没有额外语法依赖,面试场景下写这个也能完全满足考察要求。

两种方案最终输出的对象结构都和需求示例完全一致,新增的keyN属性会自动同步到keys数组中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:24:02