es6 Array Reduce 句柄第一个被减少的项目
es6 Array Reduce handle first item being reduced
我想使用 array reduce 按键对数组中的项目进行分组。
当我使用下面的 groupByIDErr
函数时,我得到 obj[item[key]] is not iterable
所以为了让它工作,我使用了 groupByID
函数,它有一个未定义的检查,如下所示。
array reduce 是否有更好的方法来处理这个问题?对于我提供的示例,我在这里所做的工作正常,但是当我必须减少更复杂的数组时,我发现它更难维护。
function groupByIDErr(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: [
...obj[item[key]],
item
]
}
}, {})
}
function groupByID(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: obj[item[key]] !== undefined ? [
...obj[item[key]],
item
]:[item]
}
}, {})
}
const people = [
{gender:'male', name: 'Tom'},
{gender:'male', name: 'Richard'},
{gender:'male', name: 'Harry'},
{gender:'female', name: 'Sarah'},
{gender:'female', name: 'Kate'}
]
console.log(groupByID(people,'gender'))
如果 obj[item[key]]
为 undefined
(因为 undefined
为假),您可以使用 obj[item[key]] || []
使其使用空数组。
function groupByID(arr, key) {
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: [
...obj[item[key]] || [],
item
]
};
}, {});
}
const people = [
{ gender: 'male', name: 'Tom' },
{ gender: 'male', name: 'Richard' },
{ gender: 'male', name: 'Harry' },
{ gender: 'female', name: 'Sarah' },
{ gender: 'female', name: 'Kate' }
];
console.log(groupByID(people, 'gender'));
.as-console-wrapper { min-height: 100%; }
您需要一个递归函数来首先遍历数组的深度,然后 return 对象值。
函数 recurCheck(你的数组,键){
//如果数组在数组中
recurCheck(newArray,key)
//别的
在这里添加你的 reduce 函数 return
}
我想使用 array reduce 按键对数组中的项目进行分组。
当我使用下面的 groupByIDErr
函数时,我得到 obj[item[key]] is not iterable
所以为了让它工作,我使用了 groupByID
函数,它有一个未定义的检查,如下所示。
array reduce 是否有更好的方法来处理这个问题?对于我提供的示例,我在这里所做的工作正常,但是当我必须减少更复杂的数组时,我发现它更难维护。
function groupByIDErr(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: [
...obj[item[key]],
item
]
}
}, {})
}
function groupByID(arr,key){
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: obj[item[key]] !== undefined ? [
...obj[item[key]],
item
]:[item]
}
}, {})
}
const people = [
{gender:'male', name: 'Tom'},
{gender:'male', name: 'Richard'},
{gender:'male', name: 'Harry'},
{gender:'female', name: 'Sarah'},
{gender:'female', name: 'Kate'}
]
console.log(groupByID(people,'gender'))
如果 obj[item[key]]
为 undefined
(因为 undefined
为假),您可以使用 obj[item[key]] || []
使其使用空数组。
function groupByID(arr, key) {
return arr.reduce((obj, item) => {
return {
...obj,
[item[key]]: [
...obj[item[key]] || [],
item
]
};
}, {});
}
const people = [
{ gender: 'male', name: 'Tom' },
{ gender: 'male', name: 'Richard' },
{ gender: 'male', name: 'Harry' },
{ gender: 'female', name: 'Sarah' },
{ gender: 'female', name: 'Kate' }
];
console.log(groupByID(people, 'gender'));
.as-console-wrapper { min-height: 100%; }
您需要一个递归函数来首先遍历数组的深度,然后 return 对象值。
函数 recurCheck(你的数组,键){ //如果数组在数组中 recurCheck(newArray,key) //别的 在这里添加你的 reduce 函数 return }