Javascript 如何使用对象元素可用的最低序列更新数组中的对象元素?
我正在验证和更新具有最低可用序列号的对象数组中对象的name属性Javascript 如何使用对象元素可用的最低序列更新数组中的对象元素?,javascript,arrays,typescript,Javascript,Arrays,Typescript,我正在验证和更新具有最低可用序列号的对象数组中对象的name属性 var instances = [ { "Name": "Packer-Builder-01", "InstanceId": "i-03802c9af5ca28c15" }, { "Name": "Packer-Builder", "InstanceId": "i-03
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"
}
]
应该是,
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循环比较它们。解决方案是可行的,但我觉得对于这个需求来说,代码太多了。请建议一些方法?看起来您需要为每个键创建一个映射数组,然后使用添加后缀的帮助函数更新name属性
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
}
您可以在中收集所有已使用的数字,并为编号获取一个新的未使用值
var实例=[{Name:“Packer-Builder-01”,InstanceId:“i-03802c9af5ca28c15”},{Name:“Packer-Builder”,InstanceId:“i-03802c9af5ca25z17”},{Name:“Packer-Builder-01”,InstanceId:“i-03802c9af5ca38l21”},{Name:“Packer-Builder-03”,InstanceId:“i-0F9C7603268211E8”},
values=newset(instances.map(({Name})=>+Name.match(/\d{2}$/));
forEach((i=>o=>{
if(/\d{2}$/.test(o.Name))返回;
而(values.has(i))i++;
o、 Name+='-'+i.toString().padStart(2,'0');
i++;
})(1));
console.log(实例)代码>
。作为控制台包装{max height:100%!important;top:0;}
谢谢您的帮助,这正是我要找的。@ZAM,太好了。请查看此处,以: