繁体   English   中英

通过对象键减少/过滤对象数组

[英]reduce/filter array of objects by object key

考虑以下对象数组

const data = [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }, {
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}];

我想返回以下内容:

{
  males: [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }]
  females: [{
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}]
}

我试过在数组上映射,通过键选择对象,然后将它们添加到新数组中,结果是两个数组。 从那里,我不知道如何以简洁的方式将它们返回到新对象中。

我对ES6中的数组过滤/减少方法不太熟悉,在这里有用吗? 任何帮助表示赞赏!

您可以使用reduce

 const data = [{ name: 'James', sex: 'male', }, { name: 'Mike', sex: 'male', }, { name: 'Janet', sex: 'female', }, { name: 'Mary', sex: 'female', }]; const result = data.reduce((c, v) => { c[v.sex] = c[v.sex] || []; //Initiate if key does not exist c[v.sex].push(v); //Push the value return c; }, {}); console.log(result); 

如果您希望键为复数形式,则可以追加's'

const result = data.reduce((c, v) => {
  let k = v.sex + 's';
  c[k] = c[k] || [];           //Initiate if key does not exist
  c[k].push(v);                //Push the value
  return c;
}, {});

尝试跟随

 const data = [{name:'James',sex:'male',},{name:'Mike',sex:'male',},{name:'Janet',sex:'female',},{name:'Mary',sex:'female',}]; var result = data.reduce((acc, obj) => { acc[obj.sex + "s"] = acc[obj.sex + "s"] || []; acc[obj.sex + "s"].push(obj); return acc; }, {}); console.log(result); 

普通的旧js简单一些-

const data = [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }, {
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}];

var result = { males: [], females: []};
data.forEach(function(person){
  person.sex === 'male' ? result.males.push(person) : result.females.push(person);
});

console.log(result);

你可以做:

 const data = [{name: 'James',sex: 'male'}, {name: 'Mike',sex: 'male'}, {name: 'Janet',sex: 'female'}, {name: 'Mary',sex: 'female'}]; const result = data.reduce((a, c) => (a[c.sex + 's'].push(c), a), {males: [], females: []}); console.log(result); 

你回答你的问题了吗?

const data = [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }, {
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}];
const sex = {};
data.forEach(item => {
    if (!sex[item.sex]) sex[item.sex] = [];
    sex[item.sex].push(item);
})
console.log(sex);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM