Javascript 如何修改包含同名键的对象数组?
给定以下对象数组:Javascript 如何修改包含同名键的对象数组?,javascript,arrays,object,Javascript,Arrays,Object,给定以下对象数组: p =[ { "object1": "value", }, { "object2": "value", }, { "object1": "value", }, { "object3": "value", }, { "object4": "value", }, { "object1": "value", }, { "object3": "value", } ]; 如何使用相同的关键点修改关键点对象 因此,我有一个新的数组
p =[
{
"object1": "value",
},
{
"object2": "value",
},
{
"object1": "value",
},
{
"object3": "value",
},
{
"object4": "value",
},
{
"object1": "value",
},
{
"object3": "value",
}
];
如何使用相同的关键点修改关键点对象
因此,我有一个新的数组,如下所示:
p =[
{
"object1_1": "value",
},
{
"object2": "value",
},
{
"object1_2": "value",
},
{
"object3_1": "value",
},
{
"object4": "value",
},
{
"object1_3": "value",
},
{
"object3_2": "value",
}
];
我需要保持数组的结构几乎相同——只需更新重复的键。通过创建一个新对象来跟踪每个键的存在,可以计算每个键值出现的次数
var set = {};
var changedArray = existingArray.map(function(d){
// since each object has one key
var key = Object.keys(d)[0];
// if the key doesn't exist, add it. if it does, increment it
set[key] = (set[key] || 0) + 1
// create the name
var name = key + '_' + set[key];
// create a new object with the given key
var obj = {};
obj[name] = d[key];
return obj
});
编辑:
当然,下面提出了一些好的观点,不要使用名称集。还可以通过添加类似这样的if语句来避免第一个元素的“_1”
var name;
if (set[key] === 1 ) {
name = key;
} else {
name = key + '_' + set[key];
}
只要在重复的元素上有一个“_1”,您就可以使用最终计数再次循环。您必须在数组中迭代两次,一次检查哪些键重复,第二次替换值
var p=[{
“object1”:“value”,
}, {
“对象2”:“值”,
}, {
“object1”:“value”,
}, {
“object3”:“value”,
}, {
“对象4”:“值”,
}, {
“object1”:“value”,
}, {
“object3”:“value”,
}];
var timesByKeys={};
var numberByKeys={};
功能键(fn){
对于(变量i=0;i 控制台日志(p)代码>我在修改上看不到用户?您可以逐个删除过时的对象和新对象,或者修改它们。为什么object4
而不是object4\u 1
?您如何确保复制的对象始终具有特定的顺序(如果这很重要的话)?很难解释我为什么需要它。还有其他因素——太复杂了,无法深入研究。@TimBiegeleisen顺序并不重要。感谢快速响应。小心变量set
,一些环境将其视为关键字,因为get
ting和set
ting的对象描述符。这非常接近,您只是不想将\u 1
添加到不重复的元素中。是的,非常接近。我要玩一下这个,看看我是否能让它工作——根据@SpencerWieczorek的评论。最新的编辑做到了。我更新了,谢谢!