wob*_*ano 9 javascript arrays vue.js computed-properties
所以我有一个数组
const records = [
{
value: 24,
gender: "BOYS"
},
{
value: 42,
gender: "BOYS"
},
{
value: 85,
gender: "GIRLS"
},
{
value: 12,
gender: "GIRLS"
},
{
value: 10,
gender: "BOYS"
}
]
Run Code Online (Sandbox Code Playgroud)
我想得到sum所以我使用JavaScript数组reduce功能并且正确.这是我的代码:
someFunction() {
return records.reduce(function(sum, record){
return sum + record.value;
}, 0);
}
Run Code Online (Sandbox Code Playgroud)
使用该代码,我得到的值173是正确的.现在我想做的是将所有金额仅用于那些有"BOYS"性别的对象.
我试过类似的东西
someFunction() {
return records.reduce(function(sum, record){
if(record.gender == 'BOYS') return sum + record.value;
}, 0);
}
Run Code Online (Sandbox Code Playgroud)
但我一无所获.我在这里错过了什么吗?任何帮助将非常感激.
T4r*_*k1n 20
当你从reduce函数返回任何内容时,它返回undefined和undefined + 1 === NaN.您应该在减少之前过滤数组.
records.filter(({gender}) => gender === 'BOYS')
.reduce((sum, record) => sum + record.value)
Run Code Online (Sandbox Code Playgroud)
undefined如果您的条件不匹配,您需要返回当前金额而不是.
否则,你是不是你的蓄能器返回到降低功能,并最终将unefined匹配或当+ record.value undefined+ 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>Run Code Online (Sandbox Code Playgroud)
如果性别是'GIRLS',它将返回undefined.添加一个返回sum的else语句,它应该解决问题.
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){
if(record.gender == 'BOYS') return sum + record.value;
else return sum;
}, 0);
}
console.log(someFunction())Run Code Online (Sandbox Code Playgroud)
您还应返回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);
Run Code Online (Sandbox Code Playgroud)
const sumBoys = records.reduce((sum, record) => {
if (record.gender.toLowerCase() === 'boys') {
return sum + record.value;
}
return sum;
}, 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11866 次 |
| 最近记录: |