JS在对象中访问数组

时间:2016-06-18 04:58:47

标签: javascript arrays json object

我有一个变量,其中包含一串经过验证的JSON。 JSON是一组字符串,每个字符串都有一个数组值。我想访问字符串和每个数组值。

var json_string = {"div-1":["div-1A", "div-1B"], "div-2":["div-2A", "div-2B"]};

//Run some code to get the following result:
console.log("div-1" has "div-1A");
console.log("div-1" has "div-1B");
console.log("div-2" has "div-2A");
console.log("div-2" has "div-2B");

我尝试了很多不同的东西,但似乎没有什么工作正常。另外,我得到了一个奇怪的功能。如果我执行以下操作:

console.log(json_string["div-1"]);

我为每个页面刷新随机获得以下结果:

div-1A //initial load
div-1C //refresh 1
div-1A //refresh 2
div-1B //etc
div-1A //etc

我有什么想法可以得到我想要的东西?

4 个答案:

答案 0 :(得分:1)

使用 Object.keys() 获取所有对象键,使用 Array#forEach 来迭代数组。

var json_string = {
  "div-1": ["div-1A", "div-1B"],
  "div-2": ["div-2A", "div-2B"]
};

// Get all object keys and iterate over them
Object.keys(json_string).forEach(function(key) {
  // Get inner array using key and iterate
  json_string[key].forEach(function(el) {
    console.log(key + ' has ' + el)
  });
});

对于旧浏览器,请检查Object.keys methodforEach method的填充选项。

答案 1 :(得分:1)

如果我理解正确的话,这将是这样的。您必须遍历每个属性并对该键获取数组属性值。

for (key in json_string) {
    var arr = json_string[key];
    arr.forEach(function(item) {
        console.log(key + ' has ' + item);
    });
}

答案 2 :(得分:1)

看起来你的 json_string 实际上是一个JSON对象(有区别)。也就是说,对象中的键不遵循任何排序/排序。您需要在输出之前对键进行排序:

var obj = {
  "div-1": ["div-1A", "div-1B"],
  "div-2": ["div-2A", "div-2B"]
};

Object.keys( obj ).sort().forEach( key =>
  obj[ key ].sort().forEach( val =>
    console.log( [key,'has',val].join(' ') )
  )
);

当然,您也可以编写自己的函数来输出特定键的值。下面给Object添加一个原型函数,这只是一个例子(一般不建议使用原型):

Object.prototype.valuesFor = function(key){
  this[key].sort().forEach( val => 
    console.log( [key,'has',val].join(' ') )
  )
  return this[key];
};

var obj = {
  "div-1": ["div-1A", "div-1B"],
  "div-2": ["div-2A", "div-2B"]
};

obj.valuesFor('div-1')

答案 3 :(得分:1)

您可以先从密钥中检索值,然后使用forEach获取其值

var json_string = {"div-1":["div-1A", "div-1B"], 
                  "div-2":["div-2A", "div-2B"]
                  };
for(var key in json_string){
 var _getValue = json_string[key]
 if(_getValue.constructor===Array){  // Checking if it is an array
       _getValue.forEach(function(item){

      document.write('<pre>'+item+'</pre>')
     })
     }

JSFIDDLE