我试图比较两个数组中的每个对象以找到匹配项。目前,我只比较一个属性,但计划比较两个属性,当我可以让这部分工作。
我觉得很奇怪,它适用于数组中的前三项,并在第四项上返回错误。以下是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数组中如预期的那样两次。思考?提前谢谢!
答案 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');
}
}
}
您正在为两个循环使用相同的变量...