【问题标题】:Javascript: Add a unique id to each object in arrayJavascript:为数组中的每个对象添加一个唯一的ID
【发布时间】:2020-09-26 09:30:20
【问题描述】:

我有这个对象数组,我正在尝试为每个对象添加一个唯一的 id 以获得所需的输出,如下所示。但是由于我是 Javascript 新手,这对我来说有点困难,请有人帮助我。

这是我的数组对象输入:

const list =  [

     {"value": "Tape Measure"},
     
     {"value": "Lawn Mower"}
  ],

]

这是我想要的具有唯一 ID 的输出:

const desiredOuput = [
  {
    "id": "ur95tnnt949003",
    "value": "Tape Measure",
  },
  {
    "id": "0698080805kg",
    "value": "Lawn Mower",
  },

]

【问题讨论】:

  • 这些 ID 背后的逻辑是什么?它们是如何生成的?你已经尝试过什么代码?
  • @str 我只是随机输入它们来说明所需的输出,但我使用了Date.now(),它不是唯一的,所以我真的需要你的帮助来添加唯一的 ID

标签: javascript arrays object data-structures


【解决方案1】:

const list = [{
  "data": [{
      "value": "Tape Measure"
    },

    {
      "value": "Lawn Mower"
    }
  ],
  "name": "Garden Todo",
}]


const res = list.map(o => {
  o.data = o.data.map(d => ({ ...d,
    id: randomId()
  }));

  return o;
})

console.log(res)

// Change this as desired
function randomId() {
  return Math.random()
}

【讨论】:

  • 可以随时forEach 直接操作对象,如果可以触摸它们。
  • 谢谢你的回答。这不输出有用吗?
  • @DilhanBhagat,是的。刚刚添加了控制台输出。
  • Math.random 不一定是唯一的。我可能会改用索引或计数器。
  • @tadman,其实o.data被修改了。我宁愿返回一个新对象。
【解决方案2】:

这是生成randId 的示例方法。 在该方法中,1) 考虑数字 (0-9) 和小写字母 (a-z) 的混合。 2)所需的randId长度(大小参数)

const randId = (size) => {
  const nums = Array.from({ length: 10 }, (_, i) =>
    String.fromCharCode("0".charCodeAt(0) + i)
  );
  const alphabets = Array.from({ length: 26 }, (_, i) =>
    String.fromCharCode("a".charCodeAt(0) + i)
  );
  const chars = [...nums, ...alphabets];
  const rand = (length) => Math.floor(Math.random() * length);
  return Array.from({ length: size }, () => chars[rand(chars.length)]).join("");
};

const list = [{ value: "Tape Measure" }, { value: "Lawn Mower" }];

const newlist = list.map(({ value }) => ({ value, id: randId(6) }));

console.log(newlist);

【讨论】:

    【解决方案3】:

    试试这个...

    const list = [{
      "data": [{
          "value": "Tape Measure"
        },
    
        {
          "value": "Lawn Mower"
        }
      ],
      "name": "Garden Todo",
    }]
    
    const result = list.map(l => {
      l.data = l.data.map(d => ({id:Math.floor(Math.random() * Date.now()), ...d}));
      return l;
    })
    console.log(result);

    【讨论】:

      【解决方案4】:
      • 此功能将为您提供完全唯一的 ID
      function genID() {
          const timeStamp = Date.now();
          let str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
          let Id = '';
          for (let i = 0; i < 7; i++) {
              let rom = Math.floor(1 +(str.length -1)*Math.random());
              Id += str.charAt(rom);
          }
          Id += timeStamp.toString();
          return Id;
      }
      
      • 您也可以只使用时间戳
      let id = Date.now();
      

      【讨论】:

        【解决方案5】:

        npm install uuid

        然后:

        const { v4: uuidv4 } = require('uuid');
        
        list.forEach(el=> el.id = uuidv4());
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 1970-01-01
          相关资源
          最近更新 更多