【问题标题】:Count no of record as per key value from array using Javascript/Jquery [duplicate]使用Javascript / Jquery根据数组中的键值计算记录数[重复]
【发布时间】:2019-08-08 15:33:41
【问题描述】:

我需要使用 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}
]

【问题讨论】:

标签: javascript jquery arrays object


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以使用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; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2021-09-18
      • 1970-01-01
      • 2019-08-01
      相关资源
      最近更新 更多