javascript - 如何重命名数组中的多个相同事件
问题描述
我想重命名我的元素我有这个数组:
重命名数组中多个相同的匹配项
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'}]
也有它可以工作吗?
解决方案
使用计数来记录元素的计数。映射数组并追加大于一的计数...
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)
推荐阅读
- performance - Jmeter HTML 报告是从 csv 文件(简单数据编写器)生成的,如何在 Taurus 中禁用从 kpi.jtl 文件生成报告?
- c++ - 如果您创建一个可变长度数组并使用 g++ 编译会发生什么
- java - 我应该先将客户端的流读入字符串,然后在从客户端的流中获取输入的同时解析 HTTP 还是解析 HTTP?
- c# - 如果自定义身份验证成功,如何制作在 [Authorize] 之前运行的自定义身份验证过滤器并禁用它?
- javascript - 当 turf.booleanPointInPolygon 返回 true 时打开网页
- reactjs - 在 veracrypt 容器中创建反应应用程序失败
- python - 如何为使用 X11 的 linux 创建一个类似于浮动窗口的系统托盘?
- assembly - 自定义指令集
- python - self 可以被类中的队列对象覆盖吗?
- javascript - 无法读取未定义的属性“列表”