首页 > 解决方案 > 如何重命名数组中的多个相同事件

问题描述

我想重命名我的元素我有这个数组:

重命名数组中多个相同的匹配项

var arr = ['a','b', 'c', 'a', 'f', 'r', 'b', 'a'];
let tally ={'a':0,'b':0,'c':0,'d':0,'e':0,'f':0};
for (var i = 0; i < arr.length; i++) {
  if (arr.indexOf(arr[i]) != i) {
    tally[arr[i]]++;
    arr[i] = arr[i] + tally[arr[i]];
  }
}
console.log('arr', arr)

但我得到了一个很好的结果,我想要这个结果:

'a', 'b', 'c' 'a1', 'f', 'r', 'b1', 'a2'

这很好,但我怎样才能建立这个结构动态?

让计数={'a':0,'b':0,'c':0,'d':0,'e':0,'f':0};

注意:a,b,c 仅用于我的示例,实际上是我项目中的人名

但是,如果我var arr = [{name:'a'},{name:'b'}, {name:'c'}, {name:'a'}, {name:'f'}, {name:'r'}, {name:'b'}, {name:'a'}]也有它可以工作吗?

标签: javascript

解决方案


使用计数来记录元素的计数。映射数组并追加大于一的计数...

const arr =  [{name:'a'},{name:'b'}, {name:'c'}, {name:'a'}, {name:'f'}, {name:'r'}, {name:'b'}, {name:'a'}];
let tally = {}
const result = arr.map(el => {
  const name = el.name;
  tally[name] = tally[name] ? tally[name]+1 : 1;
  return { name: tally[name] > 1 ? `${name}${tally[name]-1}` : name }
})

console.log(result)


推荐阅读