我采用了一个带有双参数的 php 数组(类似于 ['contact']['en'] 或 ['contact']['fr'] 或 ['presentation']['en'])并做了一个 json_encode 在 javascript 中有它的值(所以我可以将它用于 ajax)
当我做 alert(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 到我相信存在的 k 的数量(因此是第一个对象)的数字。 我设法用 php 做了我想做的事,但没有用 javascript ...我如何获取已验证对象中对象的值?
最佳答案
它会是:
for (var a in variable[k]){
alert(variable[k][a]);
}
k
和 a
是字符串(属性的名称)。
为避免大量重复查找,您可能会将对象保存到临时文件中:
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 等旧版浏览器上进行 polyfill。
关于Javascript 获取对象内部的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998044/