给定以下嵌套对象数组:
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"
}
},
}
];
我需要保持数组的结构几乎相同 - 只需更新重复的名称值。
我需要这个的原因是因为我使用了一个插件来检查重复的名称,然后将它们组合起来(这些内容的原因或原因太复杂,无法在此处发布。)
答案 0 :(得分: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 :(得分:0)
保留一个对象,其中每个名称都用作键,并将其用作值。
然后在每次迭代中引用它以查看名称是否已被使用。
如果尚未使用它,请将其添加到阵列并将其设置为1.在这种情况下,名称将保持不变。
如果已经使用过,请在数组中增加它的值。在这种情况下,名称将加上'_'加上使用name作为键存储在对象中的值。
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);