如果数组中只有一个对象,则Lodash返回错误的reduce结果
Lodash returns wrong reduce result if there is only one object in the array
我得到一个对象数组,其中包含一些需要求和的值。有时数组中只有一个项。在这种情况下,我得到了一个错误的值。
var sumGood = _.reduce([{value:1},{value:2}], function(sum, n) {
return sum.value + n.value; });
console.log(sumGood)
// 3
var sumBad = _.reduce([{value:1}], function(sum, n) {
return sum.value + n.value; });
console.log(sumBad)
// Object {value: 1}
这是小提琴
如何使其返回分别为3和1的正确结果?
首选解决方案:您可以将reduce的第三个参数设置为初始迭代,此处{value:0}。如果没有这一点,如果你只有一个项目,lodash就无法知道以前的sum
是什么。
_.reduce(array, function(sum, n) {
return sum.value + n.value;
}, {value:0});
或者,您可以在reduce:之前向数组添加一个0值
array.unshift( {value: 0} ) // now array is [{value:0}, {value:1}}]
或者做地图缩小:
_(array).pluck('value').reduce(function(sum, n) { return sum + n; })
或者为什么不先检查一下数组的大小?
if (array.length === 1) { return array[0].value; } else { ...reduce... }
设置初始累加器_.reduce(collection, [iteratee=_.identity], [accumulator], [thisArg])
var sum3 = _.reduce([{
value: 1
}, {
value: 2
}, {
value: 3
}],
function(memo, num) {
return memo + num.value;
},
0
);
console.log(sum3);
var sum1 = _.reduce([{
value: 1
}],
function(memo, num) {
return memo + num.value;
},
0
);
console.log(sum1);
var otherWay = _.reduce([{
value: 1
}, {
value: 2
}, {
value: 3
}], function(memo, num) {
memo.value = memo.value + num.value;
return memo;
}, {
value: 0
}).value;
console.log(otherWay)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
相关文章:
- Lodash映射并返回唯一
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 如何使用lodash返回与模式匹配的属性数组
- 如果数组中只有一个对象,则Lodash返回错误的reduce结果
- 为什么lodash中的_.pick(object,_.identity)返回空object
- Lodash 模板不返回已编译的文本文件
- Lodash Javascript 基于唯一属性值返回元素
- Js lodash 每次都返回相同的样本
- 使用Lodash/Undercore从对象列表中跳过并返回对象
- Lodash处理两个对象,但如果处理三个对象,则返回null
- 使用javascript/lodash对特定键的相同值进行分组,并对其进行计数,然后将结果返回到数组
- Lodash-搜索嵌套数组并返回对象
- Lodash / javascript:比较两个集合并返回差异
- 用lodash检查空对象返回false
- Lodash -从两个数组返回非共享元素的方法
- 为什么是Lodash _.查找返回未定义的方法
- 从lodash过滤器方法返回选择器的val()
- Lodash curry对流返回的函数不起作用;对FP来说,lodash FP足够了
- 返回lodash模板中的函数值
- 为什么 lodash '_.all([true, true, true], true);' 返回 'false'