2016-04-13 41 views
0

所以我有这样的对象:遍历对象的对象与数组作为值

{ 
    "apples": [ 
    "one", 
    "two" 
    ], 
    "oranges": [ 
    "three", 
    "four" 
    ] 
} 

我看上去怎么样通过这个对象,并查找four例如?例如:

for (var i=0; i < obj.length; i++) { 
    for (var y=0; y <obj.childObj.length; y++ { 
    obj.childObj[i] === 'four' ? return : null; 
    } 
} 

或者是否有更好的方法来构造这些数据?

+2

你的代码是错误的。 'return'不能像那样使用。你的要求是什么? –

+0

你想要返回什么? – gurvinder372

+0

这取决于目的。如果你总是搜索四个,那么具有四个关键字的对象将是有意义的。 –

回答

2
for(var x in obj) 
if(obj.hasOwnProperty(x)) { 
    for(var y in obj[x]) 
    if(obj[x].hasOwnProperty(y)) { 
    obj[x][y] === 'four' ? doSomething() : doSomethingElse(); 
    } 
    } 

编辑:由马修·赫布斯特建议

+0

最初看起来不错。这是存储和检索多维信息的最有效方式吗? –

+2

请确保也使用'obj.hasOwnProperty(x)'和'obj [x] .hasOwnProperty(y)' –

+0

我不知道有任何其他方法可以使您在此之上获得显着的性能提升。 –

0

您可以使用for (x in y) statemment改进:

var data = { 
    "apples": [ 
    "one", 
    "two" 
    ], 
    "oranges": [ 
    "three", 
    "four" 
    ] 
}; 

for (var key in data) { 
    var obj = data[key]; 
    for (var i=0; i <obj.length; i++) { 
     // obj[i] === 'four' ? return : null; 
     console.log(obj[i]); 
    } 
} 

这将打印:

one 
two 
three 
four 
0

如果想让找出这个对象有四个地方然后

var isFourAvailable = Object.keys(obj).filter(function(val){ return obj[val].indexOf("four") != -1 }).length > 0; 

使其更加通用

function findX(x) 
{ 
    return Object.keys(obj).filter(function(val){ return obj[val].indexOf(x) != -1 }).length > 0; 
} 
0

试试这个;)

修改你的代码;

for (var i = 0; i < obj.length; i++) { 
    for (var y = 0; y < obj[i].length; y++ { 
    if(obj[i][y] === 'four'){ 
     console.log("It's four"); 
    } 
    } 
} 
0

可以使用的indexOf

var x={ 
     "apples": [ 
     "one", 
     "two" 
     ], 
     "oranges": [ 
     "three", 
     "four" 
     ] 
    } 
    for (var e in x) { 
     if (x[e].indexOf("four") > -1) 
     console.log("found Four"); 
    }