2014-10-22 122 views
0

我知道我可以遍历一个对象数组并通过使用该键检查值。但是有没有办法通过查看值来检查密钥?我使用jQuery,但我认为这只是一个javascript问题。如何基于值迭代对象数组,而不是键?

var j = [ 
    {hello : 1}, 
    {hello : 2}, 
    {bye : 3} 
] 


$.each(j, function(i,item){ 
    if(item.hello==1) alert("hello"); 
}); 

如何使警报取决于值是1,而不管它是什么密钥?

+2

您将通过所有钥匙,重复,以找到您想要的值,然后抢对应的按键。数据没有按值进行索引。 – jfriend00 2014-10-22 00:33:56

回答

1

尝试

var j = [ 
    {hello : 1}, 
    {hello : 2}, 
    {bye : 3} 
]; 
$.each(j, function(i, item){; 
    $.each(item, function(key, value) { 
     if (value === 1) { 
     alert("it said hello") 
     } 
    }) 
}); 
0

对于expample:

var j = [ {hello : 1}, {hello : 2}, {bye : 3} ]; 
for (var i in j) 
{ 
    for (var s in j[i]) 
    { 
     if (j[i][s] == 1) 
     { 
      alert("it said hello"); 
     } 
    } 
} 
1

你将不得不遍历数组中的每个键遍历,就像这样:

$.each(j, function(i,item){ 
    for (var key in item) { 
     if (item[key]==1) { 
      alert("it said hello"); 
     } 
    } 
}); 

但是,为什么不将它存储在另一种格式,如果这是你如何” D喜欢用它?即,

var j = [ 
    [hello, 1], 
    [hello, 2], 
    [bye, 3] 
] 
+0

是。如果我知道我的数据永远不会改变结构,我会做它阵列式的,但它不能以这种方式扩展。我将所有数据保存在对象中,以便可以存储任何我想要的内容。 – tim 2014-10-23 20:48:54

1

有该换的循环中的ECMAScript 6

for (item of j){ 
    if(item.hello==1){ 
     alert("it said hello"); 
    } 
} 

这项功能出现在Firefox 31提出并它是随浏览器IE 38没有实现它。不知道其他浏览器。

+1

我喜欢它。但是,唉,支持atm,所以不得不等待。 – tim 2014-10-23 20:44:26