【问题标题】:how to get array values of keys stored in an object with "for in" loop in javascript [duplicate]如何在javascript中使用“for in”循环获取存储在对象中的键的数组值[重复]
【发布时间】:2014-07-13 01:07:16
【问题描述】:

在 Javascript 中,我想要一个具有三个属性的对象,“zone1”、“zone2”、“zone3”,每个属性都存储一个地名数组。我想通过遍历数组来查找地名来搜索匹配项。 以下问题几乎可以让我到达那里,但对我不起作用,因为我没有使用 jQuery,我想要的是价值,而不是关键:

我的代码如下所示:

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 处理这种情况?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    使用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;
            }
        }
    }
    

    【讨论】:

    • 非常感谢@Daniel A. White!非常感谢您的帮助!
    【解决方案2】:

    使用for ... in 迭代对象的属性可能会导致一些非常令人惊讶的结果,特别是如果您在Object.prototype 已扩展的环境中工作。这是因为for ... in 将遍历对象的可枚举属性包含在该对象原型链中的可枚举属性。如果这不是您想要的,但无论如何您将使用for ... in,建议在循环顶部有一个条件语句,检查属性是否属于正在迭代的对象。 (if (!foo.hasOwnProperty(x)) continue;)。幸运的是,有Object.keys()。你可以使用Object.keys() 来获取一个对象的数组自己的可枚举属性,如果你这样做你可以跳过hasOwnProperty ugliness。您可以迭代它的键数组,而不是迭代对象。

    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 上的 here

    最后一件事,在创建变量时要非常小心,在内部 for 循环中,您创建了变量 i 而不使用 var 关键字。这导致i 被绑定到全局上下文,这是您真正想要避免的。

    【讨论】:

    • 谢谢,科林!对此,我真的非常感激。我将仔细研究这些概念:)
    猜你喜欢
    • 2016-02-11
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多