需要帮助count array angularjs

时间:2017-04-07 10:46:35

标签: javascript angularjs

我有这样的数组

vm.name =['A','A','B','B','C','C','C'];

我喜欢这个来计算项目

vm.a =[];
vm.b=[];
vm.c=[];

for(var i =0;i<vm.name.length;i++){
  if(vm.name[i] ==='A'){
    vm.a.push(vm.name[i])
  }
  if(vm.name[i] ==='B'){
    vm.b.push(vm.name[i])
  }
  if(vm.name[i] ==='C'){
    vm.c.push(vm.name[i])
  }
}

以HTML格式呈现

{{vm.a.length}} //2
{{vm.b.length}} //2
{{vm.c.length}} //3

但我认为这不好。如果你有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:4)

您可以使用名为reduce的漂亮函数动态创建这些数组:)

vm.name = ['A', 'A', 'B', 'B', 'C', 'C', 'C'];

vm = vm.name.reduce(function(obj, cur) {
  obj[cur.toLowerCase()] = obj[cur.toLowerCase()] || []
  obj[cur.toLowerCase()].push(cur)
  return obj;
}, vm)

console.log(vm.b.length)
console.log(vm.c.length)

答案 1 :(得分:1)

最好在这种情况下使用switch代替if条件。

for (var i = 0; i < vm.name.length; i++) {
    switch (vm.name[i]) {
        case "A":
            vm.a.push(vm.name[i])
            break;
        case "B":
            vm.b.push(vm.name[i])
            break;
        case "C":
            vm.c.push(vm.name[i])
            break;
        default:
            console.log("no such type")
    }
}