如何在JavaScript中过滤和循环嵌套的关联对象?

问题描述 投票:-1回答:1

所以我总共有三个嵌套的关联对象/数组。首先制作Employee1和employee2,然后创建员工以嵌套两个关联对象。接下来,我创建了第三个关联对象employee3,以嵌套到employees对象中。我现在要做的是使用.filter()方法过滤2D数组,只调出当前在那里工作的员工,这在数组中用[“isCurrent”] = true表示;但我在控制台窗口中得到的所有内容都是未定义的。为什么会发生这种情况,我该如何解决这个问题?

var employee1 = [];
employee1["id"] = 33;
employee1["name"] = "Carey Shanks";
employee1["title"] = "Knife Maker";
employee1["department"] = "fabrication";
employee1["isCurrent"] = true;

var employee2 = [];
employee2["id"] = 34;
employee2["name"] = "Giles Newman";
employee2["title"] = "Lead Sales";
employee2["department"] = "Customer Service";
employee2["isCurrent"] = true;

var employees = [];
employees[0] = [];
employees[0]["id"] = 33;
employees[0]["name"] = "Carey Shanks";
employees[0]["title"] = "Knife Maker";
employees[0]["department"] = "fabrication";
employees[0]["isCurrent"] = true;

var employee3 = [];
employee3["id"] = 35;
employee3["name"] = "Tori G.";
employee3["title"] = "Product Demonstrator";
employee3["department"] = "Marketing";
employee3["isCurrent"] = false;

//MERING THE ARRAYS
employees.push(employee2);
employees.push(employee3);

//TESTING TO SEE IF IT POPULATED
//window.console.log(employees);

var i;
var currentEmployee = function (isCurrent) {
    var isCurrentEmployee = true;
    for (i in employees) {
        if (isCurrent !== true) {
            isCurrentEmployee = false;
            break;
        }
    }
    return isCurrentEmployee;
};
var isCompanyEmployee = employees.filter(currentEmployee);

window.console.log(isCompanyEmployee[i]);
javascript loops multidimensional-array methods associative-array
1个回答
1
投票

一些问题:

  • 数组只能与数字指示一起使用。如果要使用任意字符串键,请改用对象。
  • filter回调的第一个参数是迭代的当前项;您的 var currentEmployee = function (isCurrent) { isCurrent定义为第一个参数,但这不是isCurrent属性。如果您想立即从对象中提取isCurrent属性,请改为对该参数进行解构,然后您可以返回它: var currentEmployee = function ({ isCurrent }) { return isCurrent; } 或者,如果你对解构不满意,这相当于 var currentEmployee = function (employee) { return employee.isCurrent; }
  • icurrentEmployee函数之外没有任何意义 - 记录过滤后的数组: console.log(isCompanyEmployee);
  • 你永远不会把employee1推到阵列。

var employee1 = {};
employee1["id"] = 33;
employee1["name"] = "Carey Shanks";
employee1["title"] = "Knife Maker";
employee1["department"] = "fabrication";
employee1["isCurrent"] = true;

var employee2 = {};
employee2["id"] = 34;
employee2["name"] = "Giles Newman";
employee2["title"] = "Lead Sales";
employee2["department"] = "Customer Service";
employee2["isCurrent"] = true;

var employees = [];
employees[0] = {};
employees[0]["id"] = 33;
employees[0]["name"] = "Carey Shanks";
employees[0]["title"] = "Knife Maker";
employees[0]["department"] = "fabrication";
employees[0]["isCurrent"] = true;

var employee3 = {};
employee3["id"] = 35;
employee3["name"] = "Tori G.";
employee3["title"] = "Product Demonstrator";
employee3["department"] = "Marketing";
employee3["isCurrent"] = false;

//MERING THE ARRAYS
employees.push(employee1);
employees.push(employee2);
employees.push(employee3);

//TESTING TO SEE IF IT POPULATED
//window.console.log(employees);

var i;
var currentEmployee = function ({ isCurrent }) {
    return isCurrent;
};
var currentEmployees = employees.filter(currentEmployee);

window.console.log(currentEmployees);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.