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的评论。最新的编辑做到了。我更新了,谢谢!