【问题标题】:Group multiple arrays based on one common attributes with javascript使用 javascript 根据一个常见属性对多个数组进行分组
【发布时间】:2017-05-30 14:15:38
【问题描述】:

我有多个数组,由具有不同属性的人组成。类似的东西

r[0] = {name: "john", phone: 123, industry: "food" }
r[1] = {name: "moe", phone: 333, industry: "feed"}
r[2] = {name: "mark", phone: 222, industry: "food"}
r[i] = ...

如何使用 javascript 遍历这个数组,然后将结果排序为数组公共属性,比如说行业,这样结果就会像

food[["john", 123],["mark", 222]] 

feed[["mark", 333]]

现在我可以得到类似的结果

food[["john", 123]]

feed[["moe", 333]]

food[["mark", 222]]

【问题讨论】:

  • 请将您的“结果”格式化为 arrayobject 或它们的嵌套组合。现在,你想要的这个“结果”没有意义,它只是带有换行符的文本。
  • 感谢您的编辑,但 仍然不是数组。顺便提个提示:除非johnfood 等是变量,否则它必须是“john”、“food”等...
  • @GerardoFurtado,您能否编辑您的意思的数组部分。我不明白你的意思
  • 我当然不能!你是OP,只有你可以说你想说的。但试着理解这一点:你的结果可能是["food", "john, 123"],或[["food"], ["john", 123]],它们是不同的。你有看到?你需要在你的结果中写一堆括号,这样人们才能真正理解你想要什么。
  • 看到所有这些人都在写答案(到目前为止有六个!)很有趣,即使他们不知道预期的结果...

标签: javascript arrays


【解决方案1】:

您可以使用一个对象来收集所有行业分组的项目并迭代给定的键并使用原始数组中的数据进行输出。

var array = [{ name: 'john', phone: 123, industry: 'food' }, { name: 'moe', phone: 333, industry: 'feed' }, { name: 'mark', phone: 222, industry: 'food' }],
    groups = {};
    
array.forEach(function (a) {
    groups[a.industry] = (groups[a.industry] || []);
    groups[a.industry].push(a);
});

Object.keys(groups).forEach(function (k) {
    console.log(k);
    groups[k].forEach(function (a) {
        console.log([a.name, a.phone].join(', '));
    });
});

【讨论】:

    【解决方案2】:

    尝试使用Array#reduce 用于迭代数组并转换为对象,hasOwnProperty() 用于查找industry 值是否在对象中

    var a =[{name: 'john', phone: 123, industry: 'food' }, {name: 'moe', phone: 333, industry: 'feed'},{name: 'mark', phone: 222, industry: 'food'}]
     
     console.log(a.reduce(function(a,b){
    if(a.hasOwnProperty(b.industry)){
     a[b.industry].push(b)
     }
     else{
      a[b.industry] =[]
        a[b.industry].push(b)
     }
    
     return a
     },{}))

    【讨论】:

      【解决方案3】:
      const byIndustry = yourArray.reduce((categories, person) => {
         if (!categories[person.industry]) {
           categories[person.industry] = [];
         }
      
         categories[person.industry].push(person);
         return categories;
      }, {});
      

      这将产生一个以可用行业为键的对象和给定行业的一组人员:

      {
        food: [{name: 'john'}, {name: 'mark'}]
        ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-14
        • 2020-06-16
        • 2017-02-23
        • 2021-11-14
        • 2018-08-28
        • 2016-04-30
        • 1970-01-01
        • 2019-09-09
        相关资源
        最近更新 更多