如何使用"for "获取存储在对象中的键的数组值javascript中的循环
how to get array values of keys stored in an object with "for in" loop in javascript
在Javascript中,我想有一个具有三个属性的对象,"zone1", "zone2", "zone3",每个属性存储一个地名数组。我想通过迭代数组来查找地名来搜索匹配项。以下问题几乎让我在那里,但不适合我,因为我不使用jQuery,我想要的值,而不是键:
- 在关联数组的关联数组上执行foreach
- 获取关联数组键的列表
我的代码是这样的:
var zoneArray = {};
zoneArray["zone1"] = ["placeA", "placeB"];
zoneArray["zone2"] = ["placeC", "placeD"];
function getZone(place, zoneArray) {
var zone;
for (var key in zoneArray) {
for(i = 0; i<key.length; i++) {
if(key[i] == place) {
zone = key;
return zone;
}
}
}
}
getZone("placeC", climateZoneArray);
显然,"key[i]"指的是区域名称中的字母,如"z" "o" "n" "e"
谁能帮我理解或最好地处理这种情况在Javascript?
使用zoneArray[key]
访问数组
for (var key in zoneArray) {
var arr = zoneArray[key]
for(i = 0; i<arr.length; i++) {
if(arr[i] == place) {
zone = key;
return zone;
}
}
}
使用for ... in
来迭代对象的属性可能会导致一些非常令人惊讶的结果,特别是如果您在Object.prototype
已经扩展的环境中工作。这是因为for ... in
将迭代对象的可枚举属性和对象原型链中包含的可枚举属性。如果这不是你想要的,但你无论如何都要使用for ... in
,建议在循环的顶部有一个条件语句,检查属性是否属于正在迭代的对象。( if (!foo.hasOwnProperty(x)) continue;
)。幸运的是,有Object.keys()
。您可以使用Object.keys()
来获得拥有可枚举属性的对象的数组,如果您这样做,您可以跳过hasOwnProperty
的丑陋。而不是迭代对象,你可以迭代它的键数组。
var collection = {
zone1: ['placeA', 'placeB'],
zone2: ['placeC', 'placeD']
};
function getZone(needle, collection) {
var zones = Object.keys(collection),
found;
for (var i = 0, l = zones.length; i < l; i++) {
found = collection[zones[i]].filter(function(place) {
return needle == place;
});
if (found.length > 0) {
return zones[i];
}
}
};
console.log(getZone('placeC', collection));
jsfiddle.net上也有
最后一点,在创建变量时要非常小心,在内部for
循环中,您创建了变量i
,而没有使用var
关键字。这导致i
被绑定到全局上下文,这是您真正想要避免的。
相关文章:
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 得到"TypeError:对象不是函数“”;在forEach循环中使用超级测试/超级代理时
- 正在加载“"循环,每3秒更改一次文本
- 如何循环遍历表行,更改类,并使用"n〃;行数,并知道每行中第一个单元格的值
- 需要帮助修复我的javascript"对于循环“;播放音频播放列表
- 避免“;无响应脚本"foreach循环中的消息
- "下一个“;按钮并没有按预期循环浏览答案
- 为什么“;window=window.parent"创建一个无限循环
- "对于“;循环不't迭代IE中的屏幕对象
- Jade(目前称为“Pug"”)模板引擎中的循环
- "Foreach“;循环抛出错误
- "获得身份验证”;首次启动时循环forver