javascript - 检查对象数组范围内的日期
问题描述
我正在尝试创建一个函数,该函数接受一个数组并搜索以查看员工是否在 1990 年之后被雇用。如果他们是,该函数会将他们的名字推送到一个新数组。我正在处理年龄范围,所以我有点被过滤绊倒了。通过将密钥对中的前 4 个值复制到第三个比较数组,我想出了一个非常狡猾的方法。我的代码似乎按预期工作,但抛出随机错误消息,我不知道如何调试它。是否有更有效的方法来完成不会导致错误消息的相同结果?
const employeeList = [{
"id": 0,
"name": "Employee 1",
"years": "1991 - 1993",
"nationality": "Asian"
},
{
"id": 1,
"name": "Employee 2",
"years": "1988 - 2020",
"nationality": "Hispanic"
},
{
"id": 2,
"name": "Employee 3",
"years": "1990 - 2010",
"nationality": "Pacific Islander"
},
{
"id": 3,
"name": "Employee 4",
"years": "1971 - 1999",
"nationality": "Asian"
}
]
function getEmployees(array) {
let newArray = new Array();
let compareArray = new Array();
for (var i = 0, len = array.length; i < len; i++) {
compareArray.push((array[i].years).substr(0, 4));
}
console.log(compareArray)
for (var j = 0; j < compareArray.length; j++) {
console.log(compareArray[j])
console.log(array[j].name)
if (compareArray[j] > 1990) {
newArray.push.call(array[j].name);
}
}
return (newArray);
}
getEmployees(employeeList);
解决方案
您的问题在于您对.call()
. 第一个参数.call()
指定this
您正在使用的方法的绑定.call()
。在这种情况下,您将 this 设置为您的 string array[j].name
。运行时.push()
,它将尝试更新您要推送到的数组的.length
属性(因此this
是 .length 属性)。当您将 设置this
为字符串时,当 .push() 尝试更新.length
字符串的属性时,它将引发错误,因为.length
字符串的属性是只读的,这意味着您无法为其分配新值。
相反,您希望this
引用您的新数组,而不是您的字符串。相反,您可以使用:
.call(newArray, array[j].name)
或者,只需使用:
newArray.push(array[j].name);
const employeeList = [{
"id": 0,
"name": "Employee 1",
"years": "1991 - 1993",
"nationality": "Asian"
},
{
"id": 1,
"name": "Employee 2",
"years": "1988 - 2020",
"nationality": "Hispanic"
},
{
"id": 2,
"name": "Employee 3",
"years": "1990 - 2010",
"nationality": "Pacific Islander"
},
{
"id": 3,
"name": "Employee 4",
"years": "1971 - 1999",
"nationality": "Asian"
}
]
function getEmployees(array) {
let newArray = [];
let compareArray = [];
for (var i = 0, len = array.length; i < len; i++) {
compareArray.push(+(array[i].years).substr(0, 4));
}
for (var j = 0; j < compareArray.length; j++) {
if (compareArray[j] > 1990) {
newArray.push(array[j].name); // change to just `.push()` rather than `.call()`
}
}
return newArray;
}
console.log(getEmployees(employeeList));
推荐阅读
- javascript - 如何使用 Puppeteer 在 iframe 中单击按钮
- python - 添加两个多项式 Python 程序
- google-apps-script - Google App Script - 保存从驱动器中的谷歌表单上传的 zip 存档
- python - 测试一个 numpy 数组是否在数组 a 和 b 之间
- c++ - 不使用 class 关键字的前向声明
- java - 通过 Thread 关闭 MySQL 连接
- javascript - 如何在 ReactJS 中的功能组件之间传递值 - 输出 [object Object]/undefined?
- c - 更改C中字符的大小写
- reactjs - App' 指的是一个值,但在这里被用作一个类型。您的意思是“typeof App”吗?
- mfc - 我有 MFC 32 位应用程序,我想用 MFC 共享库在 64 台机器上运行它