Javascript 获取对象内部的对象

标签 javascript json

我采用了一个带有双参数的 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]);
}

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

为避免大量重复查找,您可能会将对象保存到临时文件中:

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 等旧版浏览器上进行 polyfill。

关于Javascript 获取对象内部的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998044/

相关文章:

javascript - 获取最接近表格中单选按钮的文本框

javascript - 从 onSubmit 回调生成的输入发送值

javascript - 如何添加自定义图 block 集作为 mapbox.js 图层?

javascript - 如何在 Angular 中加载嵌套数组?

javascript - 'onclick' 事件在新选项卡或其他浏览器中打开 url

javascript - 使用 node.js 的断言引发的测试错误

sql - 在 PostgreSQL 中使用 NULL 值更新 JSONB 列

javascript - JSON 字符串的值包含方括号

mysql - 如何使用 Ruby on Rails 将元素添加到序列化字段的数组中

python - aiohttp web.response 正文为 json