所以我有一个数组
const records = [
{
value: 24,
gender: "BOYS"
},
{
value: 42,
gender: "BOYS"
},
{
value: 85,
gender: "GIRLS"
},
{
value: 12,
gender: "GIRLS"
},
{
value: 10,
gender: "BOYS"
}
]
我想获得sum
所以我使用了JavaScript数组reduce功能并且正确。这是我的代码:
someFunction() {
return records.reduce(function(sum, record){
return sum + record.value;
}, 0);
}
使用该代码,我得到的值173
是正确的。现在我想要的是将所有金额仅用于那些"BOYS"
性别的对象。
我试过像
这样的东西someFunction() {
return records.reduce(function(sum, record){
if(record.gender == 'BOYS') return sum + record.value;
}, 0);
}
但我一无所获。我在这里错过了什么吗?任何帮助将不胜感激。
答案 0 :(得分:17)
当你从reduce函数返回任何内容时,它返回undefined和undefined + 1 === NaN。您应该在减少之前过滤数组。
records.filter(({gender}) => gender === 'BOYS')
.reduce((sum, record) => sum + record.value)
答案 1 :(得分:7)
如果条件不匹配,您需要返回当前金额,而不是unefined
。
否则,您不会将累加器返回到reduce函数,并在匹配时最终添加undefined
+ record.value,或者在匹配时添加undefined
+ <script>
const records = [{
value: 24,
gender: "BOYS"
},
{
value: 42,
gender: "BOYS"
},
{
value: 85,
gender: "GIRLS"
},
{
value: 12,
gender: "GIRLS"
},
{
value: 10,
gender: "BOYS"
}
];
function someFunction() {
return records.reduce(function(sum, record) {
return (record.gender !== 'BOYS') ? sum : sum + record.value;
}, 0);
}
console.log(someFunction());
</script>
。
试试这个:
def get_permissions(self):
if self.request.method == 'GET':
return [permissions.AllowAny()]
elif self.request.method == 'DELETE':
return [permissions.IsAdminUser()]
else: # PUT, PATCH
return [...]
&#13;
答案 2 :(得分:6)
如果性别是&#39; GIRLS&#39;它将返回undefined。添加一个返回sum的else语句,它应该解决问题。
oracle_client_basic
&#13;
答案 3 :(得分:3)
当性别为sum
时,您还应该返回GIRLS
。 reduce
会检查每个项目,并期望return
值。如果您没有return
值,则为undefined
。因此,在第三次迭代之后,sum
将为undefined
。
const sumBoys = records.reduce((sum, record) => {
if (record.gender.toLowerCase() === 'boys') {
return sum + record.value;
}
return sum;
}, 0);
const records = [{
value: 24,
gender: "BOYS"
}, {
value: 42,
gender: "BOYS"
}, {
value: 85,
gender: "GIRLS"
}, {
value: 12,
gender: "GIRLS"
}, {
value: 10,
gender: "BOYS"
}];
const sumBoys = records.reduce((sum, record) => {
if (record.gender.toLowerCase() === 'boys') {
return sum + record.value;
}
return sum;
}, 0);
console.log(sumBoys);
答案 4 :(得分:1)
您正在尝试检索哪个对象具有性别为“BOYS”。但是当时一些具有女性性别的物体将会返回未定义的物体。
尝试这样做以避免未定义....
var resSet=records.filter(function(options){
return options.gender == "BOYS";
}).reduce(function(a,b){
return a+parseInt(b.value);
},0);
console.log("the sum of boys set is --"+resSet);
答案 5 :(得分:0)
好吧,如果您只想坚持使用reduce
而不想使用filter
,则可以这样操作:
const records = [
{
value: 24,
gender: "BOYS"
},
{
value: 42,
gender: "BOYS"
},
{
value: 85,
gender: "GIRLS"
},
{
value: 12,
gender: "GIRLS"
},
{
value: 10,
gender: "BOYS"
}
];
var res = records.reduce(function(sum, record){
if(record.gender === 'BOYS') {
return sum + record.value;
} else{
return sum
};
}, 0);
console.log(res);
var res = records.reduce(function(sum, record){
if(record.gender == 'BOYS') {
return sum + record.value;
} else{
return sum
};
}, 0);
答案 6 :(得分:0)
我们可以使用此简化代码
let res= records.reduce(function(a,b){
return (b.gender === "BOYS" && (a+parseInt(b.value))) || a;
}, 0);
答案 7 :(得分:0)
您遇到了错误,因为在每个元素i中都减少了iterate。方法。数组并返回.accumulated值,
发生的事情是,当您的条件不满足时,累加器的值将变为未定义,因为您没有返回它。
如果满足条件,则需要先加总。 在if范围之外返回总和,