首页 > 解决方案 > 为数组中的项目设置出现次数

问题描述

我有一个地址类型如下的数组:

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 }
]

标签: javascriptarraysangularjs

解决方案


您可以使用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)


推荐阅读