Javascript在Object中获取Object

时间:2014-11-18 15:35:24

标签: javascript json

我带了一个带有双重参数的php数组(有点像['contact'] ['en']或['contact'] ['fr']或['presentation'] ['en'])一个json_encode在javascript中有它的值(所以我可以用它来表示ajax)

当我发出警报时(JSON.stringify(myvariable,null,4)); 我得到类似的东西:

{
    "contact":{
        "fr":"value",
        "en":"value2",
        "es":"value3"
        },
    "presentation":{
        "fr":"value",
        "en":"value2"
        },
        etc...
}

我想要做的是检查某个值是否等于第一个对象(例如:contact = contact)然后执行循环,以便在满足条件时获取所有值。所以,如果contact = contact,那么请告诉我fr,en和es的值。 我设法做了第一个对象:

for (var k in variable){
    if(k ==  valuechecked)
        {

        }                           
    }

但是当我在里面做if(k == valuechecked)时:

    for (var a in k){
        alert(a);
    }

它显示从0到I的数字我相信k的数量(因此是第一个对象)。 我设法用PHP做我想要的但不用javascript ...我如何得到验证对象内的对象的值?

4 个答案:

答案 0 :(得分:3)

这将是:

for (var a in variable[k]){
    alert(variable[k][a]);
}

ka是字符串(属性的名称)。

为避免大量重复查找,您可能会将对象保存到temp:

var entry = variable[k];
for (var a in entry){
    alert(entry[a]);
}

var variable = {
  "contact":{
    "fr":"contactvalue",
    "en":"contactvalue2",
    "es":"contactvalue3"
  },
  "presentation":{
    "fr":"presentationvalue",
    "en":"presentationvalue2"
  },
};
var valuechecked = "contact";
for (var k in variable){
  if(k ==  valuechecked)
  {
    var entry = variable[k];
    for (var a in entry){
      snippet.log(entry[a]);
    }

  }                           
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>


而不是for-in循环,另一个选项(只是把它扔出去)是:

Object.keys(variable).forEach(function(k) {
    if (k == valuechecked) {
        var entry = variable[k];
        Object.keys(entry).forEach(function(a) {
            // Use entry[a] here
        });
    }
});

var variable = {
  "contact":{
    "fr":"contactvalue",
    "en":"contactvalue2",
    "es":"contactvalue3"
  },
  "presentation":{
    "fr":"presentationvalue",
    "en":"presentationvalue2"
  },
};
var valuechecked = "contact";
Object.keys(variable).forEach(function(k) {
  if (k == valuechecked) {
    var entry = variable[k];
    Object.keys(entry).forEach(function(a) {
      snippet.log(entry[a]);
    });
  }
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

它只是方便,因为A)它只返回自己的属性,而不是继承属性;和B)迭代器函数为entry等临时函数提供了一个很好的包含范围。如果你在其他地方做同样的事情,你可以使用命名函数。

注意:Object.keysArray#forEach是所有现代浏览器中都存在的ES5功能。如果需要,它们都可以在IE8等旧版浏览器上进行填充。

答案 1 :(得分:2)

var obj = {
"contact":{
    "fr":"value",
    "en":"value2",
    "es":"value3"
    },
"presentation":{
    "fr":"value",
    "en":"value2"
    }
}

for(var a in obj) { 
    if(a== 'contact') {
       var b = obj[a];
       console.log("b is",  b);
       for(var c in b) {
        console.log("c is", c);
       }
    }
 }

这是解决此问题的一种方式

答案 2 :(得分:0)

这可能是您正在寻找的。 你能做的就是这个 首先将数组设置为远(我相信你已经完成了)

var array = {
"contact":{
    "fr":"value",
    "en":"value2",
    "es":"value3"
    },
"presentation":{
    "fr":"value",
    "en":"value2"
    },
    etc...
}

此处如果存在联系人。通过它。

for(first in array) {
    if (first == "contact") {
        // array.contact exists
        for(k in array.contact) {
             // k being key
             var thisValue = array.contact[k];
             console.log(thisValue);
        }
    }
}

答案 3 :(得分:0)

有几种方法可以做到这一点(参见T.J. Crowder's answer)但是如果你知道你正在追踪对象中的特定项目,你可以直接询问它而不是先寻找匹配:

//an example object:
    var myObject = {
        "contact":{
            "fr":"value",
            "en":"value2",
            "es":"value3"
            },
        "presentation":{
            "fr":"value",
            "en":"value2"
            }
    };
//get the part we are looking for:
    var obj = myObject["contact"];
//iterate over the object and alert each item:
    for (var item in obj){
        alert(item+" = "+obj[item]);
    }