【问题标题】:How can I count the amount of objects with the same name in array?如何计算数组中同名对象的数量?
【发布时间】:2020-10-07 19:53:36
【问题描述】:

我有这个数组并试图获取具有相同name 属性的对象的计数。我怎样才能做到这一点?也许以现代“es6”方式

let cars = [
    {id: 1, name: 'Mercedes', year: '2015'},
    {id: 2, name: 'Mercedes', year: '2000'},
    {id: 3, name: 'BMW', year: '2010'},
    {id: 4, name: 'BMW', year: '2004'},
    {id: 5, name: 'Volvo', year: '2012'},
    {id: 6, name: 'Volvo', year: '2014'} 
];

【问题讨论】:

标签: javascript arrays object ecmascript-6


【解决方案1】:
let counterObj = {}

let cars = [
    {id: 1, name: 'Mercedes', year: '2015'},
    {id: 2, name: 'Mercedes', year: '2000'},
    {id: 3, name: 'BMW', year: '2010'},
    {id: 4, name: 'BMW', year: '2004'},
    {id: 5, name: 'Volvo', year: '2012'},
    {id: 6, name: 'Volvo', year: '2014'} 
];


for (property of cars){
    counterObj[property.name] = 1 + (counterObj[property.name] || 0)
}

console.log(counterObj)

这应该可以解决问题!

【讨论】:

    【解决方案2】:

    这里有一个解决方案:

    let cars = [
      { id: 1, name: "Mercedes", year: "2015" },
      { id: 2, name: "Mercedes", year: "2000" },
      { id: 3, name: "BMW", year: "2010" },
      { id: 4, name: "BMW", year: "2004" },
      { id: 5, name: "Volvo", year: "2012" },
      { id: 6, name: "Volvo", year: "2014" },
    ];
    
    let numbers = cars.reduce((acc, child) => {
      if (!acc[child.name]) {
        acc[child.name] = 0;
      }
      acc[child.name]++;
      return acc;
    }, {});
    
    console.log(numbers);
    
    

    【讨论】:

      【解决方案3】:
      let cars = [
          {id: 1, name: 'Mercedes', year: '2015'},
          {id: 2, name: 'Mercedes', year: '2000'},
          {id: 3, name: 'BMW', year: '2010'},
          {id: 4, name: 'BMW', year: '2004'},
          {id: 5, name: 'Volvo', year: '2012'},
          {id: 6, name: 'Volvo', year: '2014'} 
      ];
      
      let obj = {}
      
      cars.forEach((item) => {
        console.log(obj[item.name])
        if (!obj[item.name]) {
          obj[item.name] = 1;
        } else {
          obj[item.name] += 1;
        }
      })
      
      console.log(obj)
      

      【讨论】:

        【解决方案4】:

        您可以使用一个简单的reduce 函数,它会遍历每个对象并将计数加一

        let cars = [
          { id: 1, name: "Mercedes", year: "2015" },
          { id: 2, name: "Mercedes", year: "2000" },
          { id: 3, name: "BMW", year: "2010" },
          { id: 4, name: "BMW", year: "2004" },
          { id: 5, name: "Volvo", year: "2012" },
          { id: 6, name: "Volvo", year: "2014" }
        ];
        
        let count = cars.reduce((acc, child) => {
          acc[child.name] = (acc[child.name] || 0) + 1;
          return acc;
        }, {});
        
        console.log(count);

        【讨论】:

          猜你喜欢
          • 2021-08-30
          • 1970-01-01
          • 2021-06-15
          • 2019-12-23
          • 2020-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多