如何在JavaScript中使用数组减少条件?

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)


Ale*_*ins 8

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)


Mμ.*_*Mμ. 7

如果性别是'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)


dor*_*ork 5

您还应返回sum性别为的GIRLSreduce遍历每个项目并期望一个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)