Javascript 为数组中的项设置出现次数计数
我有一个地址类型如下的数组:Javascript 为数组中的项设置出现次数计数,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我有一个地址类型如下的数组: 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 ? '' :
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>
[ { "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 }
]
在我看来,我应该显示特定地址类型的名称和出现的次数,如下所示:
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>
[ { "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
跟踪每个名称的出现情况,并相应地添加计数
步骤:-
- 将计数器初始化为映射
- 在
地址类型上循环检查计数器中是否存在该名称
- 如果存在,则将
添加到其上一个值,否则将其设置为1
1
- 在最终对象中添加count属性并从计数器中设置值
let counter=newmap()
var addressTypes=[{“id”:748,“type_id”:0,name:“Previous”},{“id”:749,“type_id”:0,name:“Previous”},{“id”:750,“type_id”:1,name:“Vacation”};
让dataWithCount=addressTypes.map(obj=>{
counter.set(对象名,(counter.get(对象名)| | 0)+1)
返回{…obj,count:counter.get(obj.name)}
})
console.log(dataWithCount)
您可以通过以下代码实现这一点:
addressTypes.forEach(function(itm) {
this[itm['id']] = (this[itm['id']] || 0) + 1;
itm.count = this[itm['id']];
}, {});
只需将and与其上下文接收器一起使用即可。这样做就足够了。注意,在使用上下文接收器时,不能使用箭头函数。因为arrow函数不允许您手动设置上下文。您不应该在模板表达式中赋值。首先用所需的输出转换数组,然后根据您选择的设计显示它。@briosheje OP从未说过分配将在模板表达式中完成,“分配若干特定地址类型的引用以在视图中使用它,而不是$index”实际上表明相反。。