javascript - 从对象中切片属性并进行计数

标签 javascript arrays json object

是否可以从对象数组中切片单个属性,例如

[{"name":"Bryan","id":016, "counter":0}, {"name":"John","id":04, "counter":2}, {"name":"Alicia","id":07, "counter":6}, {"name":"Jenny","id":015, "counter":9}, {"name":"Bryan","id":016, "counter":0}, {"name":"Jenny","id":015, "counter":9}, {"name":"John","id":04, "counter":2}, {"name":"Jenny"    ,"id":015, "counter":9}];

我试图从每个对象中切片 name 并计算相同元素的数量(有 3 个名为 Jenny 的对象),以实现以下结构:

[{"name":"Bryan","Number":2},
{"name":"John","Number":2},
{"name":"Alicia","Number":1},
{"name":"Jenny","Number":3}]

最佳答案

您想忽略已经存在的 idcounter 属性吗?

您可以创建一个对象来跟踪唯一名称,并最终转换回数组:

var data = [{"name": "Bryan",  "id": 016,  "counter": 0}, {  "name": "John",  "id": 04,  "counter": 2}, {  "name": "Alicia",  "id": 07,  "counter": 6}, {  "name": "Jenny",  "id": 015,  "counter": 9}, {  "name": "Bryan",  "id": 016,  "counter ": 0}, {  "name": "Jenny",  "id": 015,  "counter ": 9}, {  "name": "John",  "id": 04,  "counter": 2}, {  "name": "Jenny",  "id": 015,  "counter": 9}];

var result = data.reduce(function(result, item) {
  if (!result[item.name]) {
    result[item.name] = {
      name: item.name,
      counter: 0
    };
  }

  result[item.name].counter += 1;
  
  return result;
}, {});

console.log(Object.keys(result).map(function(key) { return result[key] }));

关于javascript - 从对象中切片属性并进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040341/

相关文章:

Javascript:随机绘制 block 状形状(遗传算法)

java - 如何按特定顺序打印二维数组的某些部分?

javascript - 一维到二维数组javascript

javascript - for 循环中的 if 条件 - 性能差异

javascript - 如何在 jQuery 中获取窗口选择中的单词数

json - 属性尚未定义,架构不允许附加属性

python - json 树中超出了最大递归深度

java - 如何使用 JsonReader 从 URL 读取 JSON 对象?

javascript - knockout 中复选框列表的选中属性

c# - 设置数组的长度属性