我有一个变量,其中包含一串经过验证的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
我有什么想法可以得到我想要的东西?
答案 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 method和forEach 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>')
})
}