不幸的是,我的问题昨天被关闭了 - 我读了他的答案,但我仍然卡住了。我已经了解了更多关于它的知识,但似乎无法正确理解。我正在经历一些疯狂的多维疯狂,这让我很困惑!
fresh_posts.php:
{
"posts":{
"5": {
"id":"5",
"image":"link.jpg",
"submitter":"4322309",
"views":"3"
},
"2": {
"id":"2",
"image":"link.jpg",
"submitter":"4322309",
"views":"5"
}
},
"comments":{
"2": [{
"id":"1",
"submitter":"submitter",
"time":"2435657",
"comment":"comment",
"score":"10",
"postid":"2"
},
{
"id":"2",
"submitter":"submitter",
"time":"2435657",
"comment":"comment",
"score":"10",
"postid":"2"
}
],
"5": [{
"id":"3",
"submitter":"submitter",
"time":"2435657",
"comment":"comment",
"score":"10",
"postid":"5"
}]
}
}
最初,我这样做:
$.getJSON('fresh_posts.php',function(data){
global_save_json = data.comments; // saves comments object for later use
...
})
然后我稍后在点击函数中使用它(在 getJSON
之外)。
$('.main').on('click','.new-comments',function(e){
var fullid = e.target.id;
var subid = fullid.substring(8); // subid = the number of string e.g. "show-all88" from fullid becomes "88" from subid.
function appendAllComments(input){
$.each(global_save_json.input,function(index,value){
for (var key in value) {
if (value.hasOwnProperty(key)) {
console.log(key + " -> " + value[key]);
}
}
})
}
appendAllComments(subid);
})
• 假设我们发送输入 2
(在上面的示例 JSON 对象中),并且我需要循环该数组(该数组的每个值都包含一个对象)。所以我们这样做(?):
$.each(global_save_json.2,function(index,value){
或者是
$.each(global_save_json."2",function(index,value){
^ 我们正在循环数组中的每个值 (?)
• 然后,对于每个对象(每个数组的值都是对象):
for (var key in value) {
if (value.hasOwnProperty(key)) {
console.log(key + " -> " + value[key]);
}
}
在上面的$.each()
循环中,我们将数组值定义为“value”,所以现在当我们循环对象“value”时,对吧?
这些似乎都不起作用,或者总是抛出错误(当前无法读取未定义的属性“长度”
),所以我非常感谢您的帮助。
最佳答案
好吧,很高兴你明白了,这是我的官方答案:
obj.key
语法相当于 obj['key']
如果您要索引的键是文字,则非常有用。但是,当您想以编程方式查找键时,后一种语法是您唯一可以使用的语法,因为您可以执行 var input = 2; obj[input]
。 。 (在 JavaScript 中,所有键都是字符串,因此无论是 input = 2
还是 input = '2'
都没有关系,当运行时看到 obj[input]
时,它会强制 input
为字符串。)无法使用点带有存储键名称的变量的语法。
尽管如此,您永远不能使用点语法将数值用作键。对于带有数字键的数组和对象(从技术上讲,JS 数组是对象,所以这种区别非常精细......),你永远不能这样做 obj.2
或arr.0
,您使用括号语法: obj[2]
或arr[0]
.
提示:当您试图弄清楚如何对这种深度嵌套的对象进行切片和切 block 时,使用 JavaScript 控制台确实很有帮助。您可以复制帖子顶部的 JSON 数据 open your JS console ,输入var data = <PASTE>
。这是有效的,因为 JSON 代表“JavaScript 对象表示法”并且是有效的 JavaScript!然后,您可以输入data.comments.2
并发现这是一个语法错误,与 data.comments.'2'
类似。 。但是data.comments[2]
给你两个对象,然后你可以运行 data.comments[2].map(function(val, idx) {return val.comment})
确保您掌握了语法。
关于javascript - 循环遍历键值是数组的对象(其值是对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797380/