javascript如何遍历对象?

如下代码,如果想查找 $raw中name为“杭州市”的value属性值应该怎么写~

var  $raw={
            "name": "浙江省",
            "value": "1000",
            "sub": [
                { "name": "浙江省", "value": "1000" }, { "name": "温州市", "value": "10001011" },
                { "name": "杭州市", "value": "10001012" }, { "name": "宁波市", "value": "10001013" },
                { "name": "绍兴市", "value": "10001014" }, { "name": "金华市", "value": "10001015" },
                { "name": "嘉兴市", "value": "10001016" }, { "name": "台州市", "value": "10001017" },
                { "name": "湖州市", "value": "10001018" }, { "name": "丽水市", "value": "10001019" },
                { "name": "舟山市", "value": "10001020" }, { "name": "衢州市", "value": "10001021" },
                { "name": "义乌市", "value": "10001022" }
            ],
            "type": 0
        }

//ps: 求解。

阅读 4k
6 个回答
var name = '杭州市';
var  $raw={
            "name": "浙江省",
            "value": "1000",
            "sub": [
                { "name": "浙江省", "value": "1000" }, { "name": "温州市", "value": "10001011" },
                { "name": "杭州市", "value": "10001012" }, { "name": "宁波市", "value": "10001013" },
                { "name": "绍兴市", "value": "10001014" }, { "name": "金华市", "value": "10001015" },
                { "name": "嘉兴市", "value": "10001016" }, { "name": "台州市", "value": "10001017" },
                { "name": "湖州市", "value": "10001018" }, { "name": "丽水市", "value": "10001019" },
                { "name": "舟山市", "value": "10001020" }, { "name": "衢州市", "value": "10001021" },
                { "name": "义乌市", "value": "10001022" }
            ],
            "type": 0
        };
var sub = $raw.sub;
for(var i in sub){
    var _temp = sub[i];
    if(_temp.name==name){
        console.log(_temp.value); // 输出10001012
        break;
    }
}
var val;
$raw.sub.forEach(function(item){
    val = item.name == '杭州市' ?  item.value : val;
});
console.log(val);

还是 @Coooooooool 的方法好,能break!!


var str=$raw.sub.filter(function(x){
    return x["name"]=="杭州市"
})
console.log(str[0].value)

谢邀~
方法有很多, 如楼上所示,
不过我习惯使用underscore
传送门~http://www.css88.com/doc/unde...
ps: 原生filter 返回的是一个数组, 三楼的str.value应该为str[0].value

var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });=> [2, 4, 6]

_.each(list, function((element, index, list)){ if(element.name=="杭州市") return element }); ==> [{name: "杭州市", value: ...}]

最后解决方案,借鉴了@Coooooooool的答案

   var raw = $raw;
    var value = function(name) {
        var $name = name;
        for (var i in raw) {
            var _temp = raw[i];
            if (_temp.name === $name) {
                console.log(_temp.value);
                break;
            } else {
                for (var a in _temp.sub) {
                 var temp =_temp.sub[a];
                 if (temp.name ===$name) {
                    console.log(temp.value);
                    break;
                 } 
                }
                break;
            }
        }
    };
    value("杭州市");
$raw.sub.find(i => i.name === '杭州市').value
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题