gpt4 book ai didi

javascript - 循环遍历键值是数组的对象(其值是对象)

转载 作者:行者123 更新时间:2023-11-28 00:12:02 24 4
gpt4 key购买 nike

不幸的是,我的问题昨天被关闭了 - 我读了他的答案,但我仍然卡住了。我已经了解了更多关于它的知识,但似乎无法正确理解。我正在经历一些疯狂的多维疯狂,这让我很困惑!

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.2arr.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})确保您掌握了语法。

(如果您经常使用 JS 对象、数组和数据,我推荐 lodash 或类似的项目,如 RamdaTrine 。)

关于javascript - 循环遍历键值是数组的对象(其值是对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com