[英]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.