Javascript 如何通过迭代向对象添加新属性?

Javascript 如何通过迭代向对象添加新属性?,javascript,jquery,Javascript,Jquery,我想得到这样一个对象: let newPost = { title: "Post 1", Content: "New content" } 通过这种方式编码: let newPost = {}; let postData = $(".post-data").each (function(index) { newPost.title = $(this).text() newPost.content = $(

我想得到这样一个对象:

let newPost = {
   title: "Post 1",
   Content: "New content"
}
通过这种方式编码:

let newPost = {};

let postData = $(".post-data").each (function(index) {
    newPost.title = $(this).text()
    newPost.content = $(this).text()
})

    <h5 class="card-title post-data" data-title = "title">Post 1</h5>
    <p class="card-text post-data" data = "content">New content</p>
您不需要。each()

但这是一种非常糟糕的数据组织方式。 让我向你们解释为什么会发生这种情况,然后看看下面一个更好的组织方式

原因是:

let newPost = {
   title = "New content",
   content = "New content"
}
因为.each()所做的是迭代您的项数组,每次都对其进行更改,两者都是如此。 所以发生的事情是:

步骤1:创建newPost

let newPost = {} - empty
第2步:第一次迭代,现在项目(这)就是帖子

newPost = {title: "Post 1", content: "Post 1"}
步骤3:第二次迭代,现在项(this)就是内容

newPost = {title: "New Content" content: "New Content"}
基本上,你在每次迭代中都会改变它们,这就是为什么它会停留在最后一次迭代中

如果这是您试图从中获取数据的网站,我建议您使用
,或将它们放在同一个div中,通过querySelector获取div,然后从另一个querySelector获取每个div,然后使用.textContent()从节点获取文本

如果你想刮东西也一样。 如果你正在抓取一堆东西,比如很多帖子,那么在你得到的数组上使用.map()并从那里构造对象


祝你好运:)

要做你需要做的事情,你应该在每次循环迭代中更新每个单独的属性,而不是同时更新所有属性。此外,您需要使
数据
属性名称在所有目标元素中保持一致,以便将其用作输出对象的键。考虑到这一点,请尝试以下方法:

让newPost={};
$(“.post data”).each((i,el)=>newPost[el.dataset.key]=el.innerText.trim());
console.log(newPost)

职位1

新内容

为什么会有一个
.each()
?获取
.text()
.card title
.card text
.text()
,而不是从
获取。发布数据
感谢@Elizra236的解释。这让我明白了为什么会这样。干杯谢谢,@Rory McCrossan!它是这样工作的,但我真的不明白它是如何工作的。这个$el=$(el)是什么意思?没问题,很乐意帮忙
let$el=$(el)
声明一个名为
$el
的变量,该变量包含一个jQuery对象,该对象引用
each()
el
参数,该参数是迭代中的
.post data
元素。
newPost = {title: "Post 1", content: "Post 1"}
newPost = {title: "New Content" content: "New Content"}