Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为数组中的项设置出现次数计数_Javascript_Arrays_Angularjs - Fatal编程技术网

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”实际上表明相反。。