首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用对象元素可用的最低顺序更新数组中的对象元素?

如何用对象元素可用的最低顺序更新数组中的对象元素?
EN

Stack Overflow用户
提问于 2019-04-14 23:05:56
回答 2查看 36关注 0票数 2

我正在验证和更新object数组中具有最低可用序列号的对象的name属性。

代码语言:javascript
复制
    var instances = [
          {
            "Name": "Packer-Builder-01",
            "InstanceId": "i-03802c9af5ca28c15"
          },
          {
            "Name": "Packer-Builder",
            "InstanceId": "i-03802c9af5ca25z17"
          },
          {
            "Name": "Packer-Builder",
            "InstanceId": "i-03802c9af5ca38l21"
          },
          {
            "Name": "Packer-Builder-03",
            "InstanceId": "i-0f9c76032682211e8"
          }
        ]

应该是as;

代码语言:javascript
复制
 instances =   [
          {
            "Name": "Packer-Builder-01",
            "InstanceId": "i-03802c9af5ca28c15"
          },
          {
            "Name": "Packer-Builder-02",
            "InstanceId": "i-03802c9af5ca25z17"
          },
          {
            "Name": "Packer-Builder-04",
            "InstanceId": "i-03802c9af5ca38l21"
          },
          {
            "Name": "Packer-Builder-03",
            "InstanceId": "i-0f9c76032682211e8"
          }
        ]

我这样做是通过从对象数组创建两个数组,然后使用for each循环来比较它们。解决方案是有效的,但我觉得它的代码太多,不能满足这个要求。请建议一些方法?

EN

回答 2

Stack Overflow用户

发布于 2019-04-14 23:28:21

您可以将所有使用过的数字收集到一个Set中,并使用一个新的未使用的值进行编号。

代码语言:javascript
复制
var instances = [{ Name: "Packer-Builder-01", InstanceId: "i-03802c9af5ca28c15" }, { Name: "Packer-Builder", InstanceId: "i-03802c9af5ca25z17" }, { Name: "Packer-Builder", InstanceId: "i-03802c9af5ca38l21" }, { Name: "Packer-Builder-03", InstanceId: "i-0f9c76032682211e8" }],
    values = new Set(instances.map(({ Name }) => +Name.match(/\d{2}$/)));

instances.forEach((i => o => {
    if (/\d{2}$/.test(o.Name)) return;
    while (values.has(i)) i++;
    o.Name += '-' + i.toString().padStart(2, '0');
    i++;
})(1));

console.log(instances);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 2
EN

Stack Overflow用户

发布于 2019-04-14 23:17:01

看起来您需要为每个键创建一个映射数组,然后使用添加后缀的帮助函数更新name属性。

代码语言:javascript
复制
var instances = {Name: {...}, InstanceId: {...}};
Object.keys(instances).map(name => name).forEach((k) => {
    instances[k].name = addSuffixIfNotExist(instances[k].name, k);
});

function addSuffixIfNotExist(name, index) {
    // code
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55676717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档