属性未定义Javascript数组的中途

时间:2014-06-09 15:31:33

标签: javascript arrays

我试图比较两个数组中的每个对象以找到匹配项。目前,我只比较一个属性,但计划比较两个属性,当我可以让这部分工作。

我觉得很奇怪,它适用于数组中的前三项,并在第四项上返回错误。以下是Chrome中的控制台输出:

Washington  
Smith  
yes  
Jones  
Uncaught TypeError: Cannot read property 'name' of undefined  

这是我的javascript:

var self = this;
self.people = [
    { id: '1', name: 'Washington' },
    { id: '2', name: 'Smith' },
    { id: '1', name: 'Jones' },
    { id: '1', name: 'Smith' },
    { id: '3', name: 'Washington' }
];

self.params = [
    {id: '1', name: 'Jones'},
    {id: '2', name: 'Smith'}];

for (var value in self.params) {
    for (var value in self.people) {
        console.log(self.people[value].name);
        if (self.people[value].name == self.params[value].name) {
            console.log('yes');
        }
    }
}

如果我删除if语句,代码运行时没有错误并打印"名称"在people数组中如预期的那样两次。思考?提前谢谢!

2 个答案:

答案 0 :(得分:0)

您使用两次变量名称“value”。

在Javascript中,变量不是块级别的范围(2中的2个var声明),但它们是全局的或函数范围的。

我不确定你想要达到什么目的,但也许下一行可以给你一个提示:

var val,
   value;
for (val in self.params) {
    for (value in self.people) {
        console.log(self.people[value].name);
        if (self.people[value].name == self.params[val].name) {
            console.log('yes');
        }
    }
}

答案 1 :(得分:-1)

for (var value in self.params) {
    for (var value1 in self.people) {
        console.log(self.people[value1].name);
        if (self.people[value1].name == self.params[value].name) {
            console.log('yes');
        }
    }
}

您正在为两个循环使用相同的变量...