だから私は配列を持っています
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);
}
しかし、何も得られません。ここに何かが足りませんか?どんな助けも大歓迎です。
Reduce関数から何も返さない場合、undefinedおよびundefined + 1 === NaNを返します。代わりに、縮小する前に配列をフィルタリングする必要があります。
records.filter(({gender}) => gender === 'BOYS')
.reduce((sum, record) => sum + record.value)
条件が一致しない場合、undefined
ではなく現在の合計を返す必要があります。
それ以外の場合、アキュムレータをreduce関数に返さず、一致する場合は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>
性別が「GIRLS」の場合、未定義を返します。 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())
性別がsum
の場合は、GIRLS
も返す必要があります。 reduce
は各アイテムを通過し、return
値が必要です。 return
値を指定しない場合、undefined
になります。したがって、3回目の反復の後、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);
性別が「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);