javascript - 使用 JavaScript Reduce 生成对象
问题描述
我有一个数字数组[22, 44, 12, 9, 4, 23, 1, 11, 10, 5, 2, 123]
,我需要使用 reduce 来创建一个如下所示的对象:
{
numbersLessThanTen: [...],
numbersGreaterThanTen: [...]
}
我有解决方案,如下所示:
const listOfNumbers = [22, 44, 12, 9, 4, 23, 1, 11, 10, 5, 2, 123];
const groupedBySize = listOfNumbers.reduce((total, next) => {
const less = total.numbersLessThanTen || [];
const more = total.numbersGreaterThanTen || [];
next > 10 ? total.numbersGreaterThanTen = [].concat(more, next) : total.numbersLessThanTen = [].concat(less, next);
return total;
}, {});
我的问题是,为什么以下不起作用?它只是返回初始值。当我使用 .push() 而不是 .concat() 时它可以工作,但我真的很想了解为什么这种方式不起作用。谢谢!
const groupedBySize = listOfNumbers.reduce((total, next) => {
// const less = total.numbersLessThanTen || [];
// const more = total.numbersGreaterThanTen || [];
next > 10 ? total.numbersGreaterThanTen.concat(next) : total.numbersLessThanTen.concat(next);
return total;
}, {numbersGreaterThanTen: [], numbersLessThanTen:[]});
解决方案
您可以用三元决定哪个数组,然后push()
代替concat()
:
let n = [22, 44, 12, 9, 4, 23, 1, 11, 10, 5, 2, 123]
let obj = n.reduce((obj, n) => {
(n < 10
? obj.numbersLessThanTen
: obj.numbersGreaterThanTen
).push(n)
return obj
}, {numbersLessThanTen: [], numbersGreaterThanTen:[]})
console.log(obj)
推荐阅读
- r - 计算组的比例
- database - 如何正确创建表结构“workers”或如何在 Laravel 中正确创建 Eloquent 关系?
- c - 无法在 C 中分配内存
- c# - 使用 Azure Key Vault RSA Key 加密和解密字符串
- c# - 在 Assembly.LoadFile 设置回调之后
- python - 更新:将每行数据重塑为 (x, 1) 数组
- yaml - 使用 ruamel.yaml 保持多行字符串具有相同的缩进 Python
- android - 如何使用 OnTouchListener 更改文本视图字体大小?
- unit-testing - symfony4: how do I configure dataFixture to write in test db
- three.js - 抑制三个.js 图像不是两个警告的力量