我有多个数组由具有不同属性的人组成。像
这样的东西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]]
答案 0 :(得分: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(', '));
});
});

答案 1 :(得分:0)
尝试使用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
},{}))
答案 2 :(得分:-1)
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'}]
...
}