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

如何在JavaScript中创建数组对象?除现有实现外还有其他方法吗?

几种替代实现方案

你的代码已经成功实现了自动为全局对象添加递增key的数组项的需求,这里提供几种更简洁、模块化的替代实现方式:

1. 闭包封装计数器(最简洁的替代方案)

用闭包把计数器封装起来,避免全局变量污染,逻辑和你的原代码完全一致,但无需使用生成器:

const obj = {};
// 闭包封装递增计数器,初始值和原代码对齐,第一次返回2
const getNextKey = (() => {
  let counter = 1;
  return () => ++counter;
})();

function data(first, middle, last) {
  const key = getNextKey();
  obj[key] = [first, middle, last];
  console.log(obj);
}

data("rohit", "kumar", "sharma");
data("rohit", "kumar", "sharma");

2. 模块化封装(避免全局变量)

如果不想使用全局的obj,可以把存储对象和计数器一起封装到闭包里,形成独立的数据存储模块:

const createDataStore = (() => {
  const store = {};
  let counter = 1;
  return {
    // 添加数据方法
    add: (first, middle, last) => {
      const key = ++counter;
      store[key] = [first, middle, last];
      console.log(store);
      return store;
    },
    // 可选:获取存储副本(避免外部直接修改内部数据)
    getStore: () => ({...store})
  };
})();

// 使用示例
createDataStore.add("rohit", "kumar", "sharma");
createDataStore.add("rohit", "kumar", "sharma");

3. 类实现(适合扩展场景)

如果后续需要添加更多功能(比如删除、查询数据),用类来封装会更清晰:

class DataStore {
  constructor() {
    this.store = {};
    this.counter = 1;
  }

  add(first, middle, last) {
    const key = ++this.counter;
    this.store[key] = [first, middle, last];
    console.log(this.store);
    return this.store;
  }

  // 可选:获取存储副本
  getStore() {
    return {...this.store};
  }
}

// 使用示例
const dataStore = new DataStore();
dataStore.add("rohit", "kumar", "sharma");
dataStore.add("rohit", "kumar", "sharma");

可选调整:修改key起始值

如果不需要key从2开始,把计数器初始值改成0,就能让第一次调用生成的key为1,比如闭包版本:

const getNextKey = (() => {
  let counter = 0;
  return () => ++counter;
})();

内容的提问来源于stack exchange,提问作者Surendra Singh Kamboj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31