为什么不是'这个对象循环不起作用
Why isn't this object loop working?
如果side=2,我想循环遍历这个对象,并将'loc'值添加到数组中。我做错了什么?
2025是房间的对象,所有的东西都是房间。
//Object
{
"2025": {
"tom": {
"side": 1,
"loc": 111
},
"billy": {
"side": 2,
"loc": 222
},
"joe": {
"side": 2,
"loc": 333
},
"bob": {
"side": 1,
"loc": 444
}
}
}
//Code
var side2 = [];
for (var key in rooms[room]) {
if (rooms[room].hasOwnProperty(key)) {
var obj = rooms[room][key];
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if(prop == 'loc') {
if(obj[prop] == 2) {
side2.push(key);
}
}
}
}
}
}
console.log(side2);
当side
的值为2
时,您希望推送,因此您希望检查side
而不是loc
。然后你可以简单地推obj.loc
...
if (obj.hasOwnProperty(prop)) {
if(prop == 'side') {
if(obj[prop] == 2) {
side2.push(obj.loc);
}
}
}
...
Fiddle示例
话虽如此,你可以将代码缩短一点,消除不必要的循环。你可以将所有代码缩短为:
for (var key in rooms[room]) {
var item = rooms[room][key];
if(item.side == 2)
side2.push(item.loc)
}
Fiddle示例
在您的语句中,如果side
属性的值为2,您希望将loc
属性的值推送到数组side2
。
但在你的代码
if(prop == 'loc') {
if(obj[prop] == 2) {
side2.push(key);
}
}
您正在比较loc
属性的值为2,而不是side
属性的值。你可能需要类似的东西
if(prop == 'side') {
if(obj[prop] == 2) {
side2.push(obj['loc']);
}
}
如注释和其他答案中所述,您正在寻找2
的loc
属性,但该属性不存在。因此,直接的问题可以通过用side
替换loc
来解决(假设这是您想要的)。
但是您的代码可以简化。在顶层循环是可以的。然而,代码的整个嵌套循环部分:
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
if(prop == 'loc') {
if(obj[prop] == 2) {
side2.push(key);
}
}
}
}
可以用代替
if (obj.side == 2) side2.push(key);
换句话说,您不需要循环遍历对象的属性来找到特定的属性(在本例中为side
)。您只需使用obj.side
即可访问它。
你也可以把这个问题想象成想要把房间列表筛选到那些有loc
为2的人的房间,在这种情况下,你可以写:
Object.keys(rooms) . filter(hasPeopleWithLoc(2))
其中
function hasPeopleWithLoc(loc) {
return function(roomKey) {
var room = rooms[roomKey];
return Object.keys(room) . some(function(personKey) {
return room[personKey].loc === loc;
});
};
}
请注意,如果某个房间中的任何人的loc
为2,则此代码将在结果中为该房间只留下一个条目。您的原始代码的行为略有不同;它在具有所需CCD_ 19的房间中的每个人的结果中放入该房间的条目。
相关文章:
- 循环遍历以数组为值的Javascript对象
- json对象中缺少对象循环
- 如何循环通过2个对象数组并通过匹配id进行合并
- 如何使用自定义辅助对象(handler)实现嵌套的每个循环
- 如何在javascript中循环并将JSON对象放入数组中
- 对象/数组和循环上的原型
- foreach对象循环添加到堆栈顶部
- javascript 中的框架对象循环是未定义的
- JavaScript 对象循环替换信息
- 为什么不是'这个对象循环不起作用
- 在一行中使用对象循环和数组循环
- 将从节点promise返回的对象循环到下一个.then
- 通过javascript对象循环将键转换为字符串
- 从对象循环中排除元素
- 如何在对象循环中跳过键
- javascript中的对象循环
- 动态地从对象循环键传递属性引用
- Javascript对象循环只是将最后迭代的元素追加到另一个对象
- 通过JSON对象循环后动态分配变量
- 从Javascript对象循环动态创建的表单.如何将数据保存回对象