javascript - 为数组中的项目设置出现次数
问题描述
我有一个地址类型如下的数组:
var addressTypes = [
{ "id": 748, "type_id": 0, name:"Previous"},
{ "id": 749, "type_id": 0, name:"Previous"},
{ "id": 750, "type_id": 1, name:"Vacation"}
];
在我看来,我应该显示特定地址类型的名称及其出现次数,如下所示:
<span ng-bind="address.name + ' Address ' + ($index == 0 ? '' : $index + 1"</span>
如何手动计算和分配特定地址类型的出现次数以在视图中使用它而不是 $index.html。
例如,在我的结果数组中,我想得到这样的东西:
[ { "id": 748, "type_id": 0, namne: "Previous", count: 1},
{ "id": 748, "type_id": 0, name: "Previous", count: 2},
{ "id": 750, "type_id": 1, name: "Vacation", count: 1 }
]
解决方案
您可以使用Map
来跟踪每个名称的出现并相应地添加计数
脚步:-
- 将计数器初始化为
Map
- 循环
addressTypes
检查该名称是否存在于计数器中 - 如果存在,则添加
1
到它的先前值,否则将其设置为1
- 在最终对象中添加计数属性并从计数器设置值
let counter = new Map()
var addressTypes = [{ "id": 748, "type_id": 0, name:"Previous"}, { "id": 749, "type_id": 0, name:"Previous"}, { "id": 750, "type_id": 1, name:"Vacation"}];
let dataWithCount = addressTypes.map(obj=>{
counter.set(obj.name,(counter.get(obj.name) || 0)+ 1)
return {...obj, count: counter.get(obj.name)}
})
console.log(dataWithCount)
推荐阅读
- java - Minecraft 插件:在特定坐标处获取块类型
- spring - 使用spring和spring jdbctemplate的分布式事务
- tvos - 如何在 tvOS 上以编程方式关闭“custominfoviewcontroller”?
- sql-server - 如何将参数从 Excel 传递给 SQL?
- css - 1-st 和 4-th 25% inline-block 之间需要空格
- r - 在 R 中仅打开图像的一部分(JPEG/TIFF 等)
- java - 针对不同上下文的 Java 序列化
- java - 我如何让这个 for 循环工作?
- java - 无法使用 AudioRecord 捕获 Android TV 中的音频输入 - Java
- css - 引导下拉菜单上的 z-index 不适用于变换