创建一个函数,它接受一个对象数组并根据条件

时间:2017-04-26 01:12:00

标签: javascript arrays

我是一个noob学习javascript的人。我的导师给了我这个功课。

家庭作业:编写一个函数,它接受一组对象和一个数字maxAge。 每个对象都有两个属性:name,age。 返回一个新的对象数组,仅包含年龄小于或等于maxAge的对象。

这就是我的所作所为:

const objectArray = [

firstObject = {
    name: "Ryan",
    age: 32
},

secondObject = {
  name: "Caroline",
  age: 1
},

thirdObject = {
  name: "Steve",
  age: 35
},

fourthObject = {
  name: "Sheila",
  age: 67
},

fifthObject = {
  name: "Ron",
  age: 67
},

sixthObject = {
  name: "deadGuy",
  age: 150
},

];



const maxAge = 67;


const makeAgeDiscrimArray = (objectArray) => {
  const ageDiscrimArray = [];
  const above67Array = [];
  const length = objectArray.length;
  for (let i = 0; i < objectArray.length; i++) {
    if ((objectArray[i].age <= maxAge)) {
      ageDiscrimArray.push(i)} else {
      above67Array.push(i); // I know, it is a superfluity
      }
    }
    return ageDiscrimArray;
};

console.log(makeAgeDiscrimArray(objectArray));

该函数当前返回

[ 0, 1, 2, 3, 4 ]

我知道发生了什么,但我不完全明白为什么。

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

您正在添加&#34;我&#34;到数组而不是对象。改为:

for (let i = 0; i < objectArray.length; i++) {
  if ((objectArray[i].age <= maxAge)) {
      ageDiscrimArray.push(objectArray[i])} // <= objectArray[i]
  else {
      above67Array.push(objectArray[i]); // <= objectArray[i]
  }
}

答案 1 :(得分:0)

本质上,函数makeAgeDiscrimArray将数组分成两个不同的数组。它使用最大年龄来做到这一点。

您需要确保将位置i的数组对象添加到数组的实际位置i

此外,您可以查看filtermap这些是JS中内置的函数,对于在数组上执行操作非常有用。

答案 2 :(得分:0)

您正在将objectArray中相关对象的索引添加到结果数组而不是对象本身

答案 3 :(得分:0)

我不确定你是否要求别人解释这一切是如何运作的,但我会看看是否可以将其分解。

在其他语言中,这将被称为lambda或匿名函数。 在此函数中,您传入objectArray。这在javascript中称为参数,允许您将数据输入到您的函数中。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

您在函数中使参数与对象的名称相同,但您可以将其命名为完全不同的名称。

const makeAgeDiscrimArray = (objectArray) => {
}

常量无法更改,但如果在Javascript中为它们分配了一个数组,则可以将新项目推送到数组中。

如果尝试为这些变量分配一个新数组,虽然它会引发错误。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

const ageDiscrimArray = [];
const above67Array = [];

在这里,您将objectArray中的项目数分配给常量。

const length = objectArray.length;

让这部分更容易阅读。

for (let i = 0; i < objectArray.length; i++) {
    if (objectArray[i].age <= maxAge) {
      ageDiscrimArray.push(i)
    } 
    else {
      above67Array.push(i); // I know, it is a superfluity
    }
  }
return ageDiscrimArray;
};

For循环。创建一个按1(i ++)计数的新变量,直到达到objectArray中的项目数。

对于数组中的每个对象,首先检查年龄是否小于或等于maxAge。然后它将该数组对象推送到const数组ageDiscrimArray。

如果它与if语句不匹配,则继续执行else,并将该数组项推送到above67Array。

然后将ageDiscrimArray返回给函数。

这是您实际调用匿名函数的地方。

console.log(makeAgeDiscrimArray(objectArray));

在最后一段代码中,您告诉它打印您的变量makeAgeDiscrimArray,它恰好是一个匿名函数。它遍历我之前解释的所有内容,并返回您告诉函数返回的任何内容(您的数组)。所以我想重要的是它没有返回你的实际对象,它会在第一个数组中返回对象编号,这是一个重要的区别。

无论如何,希望这有帮助!