使用Javascript / Jquery根据数组中的键值对记录数进行计数

时间:2019-03-18 09:43:03

标签: javascript jquery arrays object

我需要使用Javascript / Jquery按键值计算对象数组内部存在的记录数。我在下面解释我的代码。

var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
  {"name":"carl","amount":120.11,"date":"11/12/2015"},
  {"name":"jim","amount":45,"date":"12/01/2015"},
  {"name":"stacy","amount":12.00,"date":"01/04/2016"},
  {"name":"stacy","amount":34.10,"date":"01/04/2016"},
  {"name":"stacy","amount":44.80,"date":"01/05/2016"}
];

以上是我的对象数组。在这里,我需要根据相同的name值来计算记录数,并在下面给出我的预期输出。

var output=[
         {"name":"jim","count":2},
         {"name":"carl","count":1},
         {"name":"stacy","count":3}
]

2 个答案:

答案 0 :(得分:2)

您可以使用reduce

var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
  {"name":"carl","amount":120.11,"date":"11/12/2015"},
  {"name":"jim","amount":45,"date":"12/01/2015"},
  {"name":"stacy","amount":12.00,"date":"01/04/2016"},
  {"name":"stacy","amount":34.10,"date":"01/04/2016"},
  {"name":"stacy","amount":44.80,"date":"01/05/2016"}
];

var output = arrResult.reduce((acc, curr) => {
  if (!acc.some(({ name }) => name == curr.name)) {
    acc.push({ name: curr.name, count: 1 });
  } else {
    acc.find(({ name }) => name == curr.name).count++;
  }
  return acc;
}, []);

console.log(output);

ES5语法:

var arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},
  {"name":"carl","amount":120.11,"date":"11/12/2015"},
  {"name":"jim","amount":45,"date":"12/01/2015"},
  {"name":"stacy","amount":12.00,"date":"01/04/2016"},
  {"name":"stacy","amount":34.10,"date":"01/04/2016"},
  {"name":"stacy","amount":44.80,"date":"01/05/2016"}
];

var output = arrResult.reduce(function(acc, curr) {
  if (!acc.some(function(e) {
    return e.name == curr.name;
  })) {
    acc.push({ name: curr.name, count: 1 });
  } else {
    acc.find(function(e) {
      return e.name == curr.name;
    }).count++;
  }
  return acc;
}, []);

console.log(output);

答案 1 :(得分:0)

您可以结合使用Object.values()Array.prototype.reduce()

const arrResult = [{"name":"jim","amount":34,"date":"11/12/2015"},{"name":"carl","amount":120.11,"date":"11/12/2015"},{"name":"jim","amount":45,"date":"12/01/2015"},{"name":"stacy","amount":12.00,"date":"01/04/2016"},{"name":"stacy","amount":34.10,"date":"01/04/2016"},{"name":"stacy","amount":44.80,"date":"01/05/2016"}];
const output = Object.values(arrResult.reduce((a, c) => {
  a[c.name] = a[c.name] ? {name: c.name, count: ++a[c.name].count} : {name: c.name, count: 1};
  return a;
}, {}));

console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }