【问题标题】:How to modify an array of objects containing values of the same name?如何修改包含同名值的对象数组?
【发布时间】:2016-01-05 11:24:20
【问题描述】:

给定以下嵌套对象数组:

    var existingArray = [{
            "content": {
                "host": {
                    "name": "Mia"
                }
            },
        }, {
            "content": {
                "host": {
                    "name": "Annie"
                }
            },
        }, {
            "content": {
                "host": {
                    "name": "Mia"
                }
            },
            ,
            {
                content: {
                    host: {
                        name: "Oscar"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Annie"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Mia"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Annie"
                    }
                },
            }
        ];

如果它们匹配,我将如何修改对象的名称值——以区分它们?

要产生一个新的数组,如:

        var existingArray = [{
            "content": {
                "host": {
                    "name": "Mia"
                }
            },
        }, {
            "content": {
                "host": {
                    "name": "Annie"
                }
            },
        }, {
            "content": {
                "host": {
                    "name": "Mia_2"
                }
            },
            ,
            {
                content: {
                    host: {
                        name: "Oscar"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Annie_2"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Mia_3"
                    }
                },
            },
            {
                "content": {
                    "host": {
                        "name": "Annie_3"
                    }
                },
            }
        ];

我需要保持数组的结构几乎相同——只需更新重复的名称值。

我需要这个的原因是因为我正在使用一个插件来检查重复的名称,然后将它们组合起来(方法或原因太复杂,无法在此处发布。)

【问题讨论】:

  • 你有没有尝试过?
  • 这很简单,你有没有尝试过?
  • 老实说,我已经工作了好几天而且很累——因此很懒惰并发布了这个。希望有人能快速回答。
  • 建议:循环每个名字并不断添加到一个新的数组中。 existingArray 中的每个名称你检查临时数组,如果它已经插入那里,从 existingArray 更改名称添加 _ count+1,如果它不在临时数组中,添加到它并转到下一个名称。

标签: javascript arrays object


【解决方案1】:

这样的事情可能对你有用:

var i;
var k;
for(i = 0; i < existingArray.length; i++){
    var count = 2;
    for(k = 0; k < existingArray.length; k ++){
        if(i != k && existingArray[i].content.host.name === existingArray[k].content.host.name){
            existingArray[k].content.host.name += '_' + count;
            count++;
        }
    }
}

【讨论】:

  • 它很接近——只是继续将“_1”附加到所有值而不是将它们附加到重复项。:jsfiddle.net/ansible/uvx4zeeh
  • 更改为if(i!=k &amp;&amp; existingArray[i].content.host.name === existingArray[k].content.host.name){并启动count = 2;
  • @FirstOne 看起来可能存在语法错误。
【解决方案2】:

保留一个对象,每个名称作为键,使用次数作为值。

然后在每次迭代中引用它以查看 name 是否已被使用。

如果尚未使用,请将其添加到数组中并将其设置为 1。在这种情况下,名称将保持不变。

如果它已被使用,则增加它在数组中的值。在这种情况下,名称将是名称加上“_”加上使用名称作为键存储在对象中的值。

var existingArray = [  
   {  
      "content":{  
         "host":{  
            "name":"Mia"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Annie"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Mia"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Oscar"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Annie"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Mia"
         }
      }
   },
   {  
      "content":{  
         "host":{  
            "name":"Annie"
         }
      }
   }
]
,   usedNames = {}
,   newArray = []
,   result = ''
;
for(var index = 0; index < existingArray.length; index ++) {
    var name = existingArray[index]['content']['host']['name'];
    newArray.push(existingArray[index]);
    if(typeof usedNames[name] !== 'number') {
        usedNames[name] = 1;
        newArray[index]['content']['host']['name'] = name;
    } else {
        usedNames[name] ++;
        newArray[index]['content']['host']['name'] = name + '_' + usedNames[name];
    }
    result += 'content: host: name: ' + newArray[index]['content']['host']['name'] + '<br/>';
}
document.write(result);

【讨论】:

  • 我对这个问题的评论是否启发了你?
  • @FirstOne 不。我后来看到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2022-01-22
  • 1970-01-01
  • 2012-02-17
  • 2021-04-30
  • 2021-02-07
相关资源
最近更新 更多