我是一个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 ]
我知道发生了什么,但我不完全明白为什么。
提前感谢您的帮助!
答案 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
。
此外,您可以查看filter
和map
这些是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,它恰好是一个匿名函数。它遍历我之前解释的所有内容,并返回您告诉函数返回的任何内容(您的数组)。所以我想重要的是它没有返回你的实际对象,它会在第一个数组中返回对象编号,这是一个重要的区别。
无论如何,希望这有帮助!