在Javascript数组的中途未定义属性

Property undefined halfway through Javascript array

本文关键字:未定义 属性 Javascript 数组      更新时间:2023-09-26

我试图比较两个数组中的每个对象,以便找到匹配项。目前,我只比较一处房产,但计划在我能让这部分工作时比较两处房产。

我觉得奇怪的是,它适用于数组中的前三项,而在第四项返回错误。以下是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数组中的"名称"。想法?提前感谢!

您使用的是变量名"value"的两倍。

顺便说一句,在Javascript中,变量的作用域不在块级别(您在2 for中的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');
        }
    }
}
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');
        }
    }
}

两个循环都使用相同的变量。。。