如何使用"for "获取存储在对象中的键的数组值javascript中的循环

how to get array values of keys stored in an object with "for in" loop in javascript

本文关键字:quot 循环 javascript 数组 for 何使用 获取 存储 对象      更新时间:2023-09-26

在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被绑定到全局上下文,这是您真正想要避免的。