我带了一个带有双重参数的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 ...我如何得到验证对象内的对象的值?
答案 0 :(得分:3)
这将是:
for (var a in variable[k]){
alert(variable[k][a]);
}
k
和a
是字符串(属性的名称)。
为避免大量重复查找,您可能会将对象保存到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.keys
和Array#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]);
}