如何在Javascript中将几个新对象添加到对象数组的最后一个对象之后?

4

我正在制作一个基于Ionic框架的移动应用程序,它将展示一个由WordPress构建的新闻网站。json文件是从该网站获取的。我需要获取相同的重复json数据以及一些来自WordPress网站的新文章,以便在用户继续向下滚动时为我的应用程序展示新闻。因此,我需要将这些新的几篇文章对象添加/附加到先前的“posts”对象数组中。以下是典型的WordPress文章json文件对象样式。

{
    "status": "ok",
    "count": 2,
    "count_total": 4231,
    "pages": 2116,
    "posts": [
        {
        "id": 62296,
        "type": "post",
        "slug": "any slug",
        "url": "any url",
        "status": "publish",
        "title": "any title",
        "title_plain": "any title",
        "content": "any content",
        "excerpt": "any excerpt",
        "date": "2015-02-26 02:08:57",
        "modified": "2015-02-26 02:09:59",
        "categories": [
            {
                "id": 1015,
                "slug": "any slug",
                "title": "any title",
                "description": "",
                "parent": 0,
                "post_count": 7
            }
        ],
        "tags": [
            {
                "id": 1180,
                "slug": "any slug",
                "title": "any title",
                "description": "",
                "post_count": 6
            },
            {
                "id": 1179,
                "slug": "religion",
                "title": "religion",
                "description": "",
                "post_count": 5
            },
            {
                "id": 1209,
                "slug": "any slug",
                "title": "any title",
                "description": "",
                "post_count": 4
            }
        ],
        "author": {
            "id": 1,
            "slug": "newsdesk",
            "name": "NewsDesk",
            "first_name": "",
            "last_name": "",
            "nickname": "NewsDesk",
            "url": "",
            "description": ""
        },
        "comments": [],
        "attachments": [
            {
                "id": 44930,
                "url": "anything appropriate",
                "slug": "anything appropriate",
                "title": "anything appropriate",
                "description": "",
                "caption": "",
                "parent": 62296,
                "mime_type": "image/jpeg",
                "images": {
                    "full": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    },
                    "thumbnail": {
                        "url": "anything appropriate",
                        "width": 150,
                        "height": 147
                    },
                    "medium": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    },
                    "large": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    },
                    "tie-small": {
                        "url": "anything appropriate",
                        "width": 55,
                        "height": 55
                    },
                    "tie-medium": {
                        "url": "anything appropriate",
                        "width": 272,
                        "height": 125
                    },
                    "tie-large": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    },
                    "slider": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    },
                    "big-slider": {
                        "url": "anything appropriate",
                        "width": 290,
                        "height": 147
                    }
                }
            }
        ],
        "comment_count": 0,
        "comment_status": "open",
        "thumbnail": "anything appropriate": {
            "views": [
                "2"
            ],
            "taq_review_button_text": [
                ""
            ],
            "taq_review_button_size": [
                "medium"
            ],
            "taq_review_button_shape": [
                "square"
            ],
            "taq_review_button_color": [
                "#c7c7c7"
            ],
            "taq_button_icon": [
                "fa fa-check"
            ],
            "taq_review_button_type": [
                "flat"
            ],
            "taq_review_button_url": [
                ""
            ],
            "taq_review_title": [
                ""
            ],
            "taq_review_position": [
                ""
            ],
            "taq_review_style": [
                "stars"
            ],
            "taq_review_summary": [
                ""
            ],
            "taq_review_total": [
                ""
            ],
            "tie_hide_meta": [
                ""
            ],
            "tie_hide_author": [
                ""
            ],
            "tie_hide_share": [
                ""
            ],
            "tie_hide_related": [
                ""
            ],
            "tie_hide_check_also": [
                ""
            ],
            "tie_sidebar_pos": [
                "default"
            ],
            "tie_sidebar_post": [
                "category lifestyle"
            ],
            "tie_post_head": [
                "none"
            ],
            "tie_post_slider": [
                "59602"
            ],
            "tie_googlemap_url": [
                ""
            ],
            "tie_video_url": [
                ""
            ],
            "tie_video_self": [
                ""
            ],
            "tie_embed_code": [
                ""
            ],
            "tie_audio_m4a": [
                ""
            ],
            "tie_audio_mp3": [
                ""
            ],
            "tie_audio_oga": [
                ""
            ],
            "tie_audio_soundcloud": [
                ""
            ],
            "tie_banner_above": [
                ""
            ],
            "tie_banner_below": [
                ""
            ],
            "tie_posts_num": [
                ""
            ],
            "post_color": [
                ""
            ],
            "post_background": [
                "anything appropriate"
            ],
            "tie_views": [
                "2"
            ]
        },
        "thumbnail_size": "thumbnail",
        "thumbnail_images": {
            "full": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            },
            "thumbnail": {
                "url": "anything appropriate",
                "width": 150,
                "height": 147
            },
            "medium": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            },
            "large": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            },
            "tie-small": {
                "url": "anything appropriate",
                "width": 55,
                "height": 55
            },
            "tie-medium": {
                "url": "anything appropriate",
                "width": 272,
                "height": 125
            },
            "tie-large": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            },
            "slider": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            },
            "big-slider": {
                "url": "anything appropriate",
                "width": 290,
                "height": 147
            }
        }
    },
    {
       //This is another "posts" object
    }
]
}

我对Javascript不是很熟悉,所以要将新获取的帖子追加到相同的“posts”数组中让我感到困难。
我可以将“posts”数组保存到我的应用程序变量中,但无法将新获取的对象追加到“posts”数组中最后一个帖子对象之后。

2
基本上是 obj.posts.push( { OBJ }) - Mouser
但是我的新JSON数据也包含对象数组。 - Ali Hayder
1
@AliHayder 是的,所以你需要在对象内部将数据 pushpost 数组中。 - Spencer Wieczorek
嗨@Mouser,实际上我想将几个新的“posts”对象添加到主“posts”数组中。我正在编辑问题。对不起造成不便。 - Ali Hayder
3个回答

2

var news = {
  "status": "ok",
  "count": 2,
  "count_total": 4231,
  "pages": 2116,
  "posts": [{
    "id": 62296,
    "type": "post",
    "slug": "any slug",
    "url": "any url",
    "status": "publish",
    "title": "any title",
    "title_plain": "any title",
    "content": "any content",
    "excerpt": "any excerpt",
    "date": "2015-02-26 02:08:57",
    "modified": "2015-02-26 02:09:59",
    "categories": [{
      "id": 1015,
      "slug": "any slug",
      "title": "any title",
      "description": "",
      "parent": 0,
      "post_count": 7
    }],
    "tags": [{
      "id": 1180,
      "slug": "any slug",
      "title": "any title",
      "description": "",
      "post_count": 6
    }, {
      "id": 1179,
      "slug": "religion",
      "title": "religion",
      "description": "",
      "post_count": 5
    }, {
      "id": 1209,
      "slug": "any slug",
      "title": "any title",
      "description": "",
      "post_count": 4
    }],
    "author": {
      "id": 1,
      "slug": "newsdesk",
      "name": "NewsDesk",
      "first_name": "",
      "last_name": "",
      "nickname": "NewsDesk",
      "url": "",
      "description": ""
    },
    "comments": [],
    "attachments": [{
      "id": 44930,
      "url": "anything appropriate",
      "slug": "anything appropriate",
      "title": "anything appropriate",
      "description": "",
      "caption": "",
      "parent": 62296,
      "mime_type": "image/jpeg",
      "images": {
        "full": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        },
        "thumbnail": {
          "url": "anything appropriate",
          "width": 150,
          "height": 147
        },
        "medium": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        },
        "large": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        },
        "tie-small": {
          "url": "anything appropriate",
          "width": 55,
          "height": 55
        },
        "tie-medium": {
          "url": "anything appropriate",
          "width": 272,
          "height": 125
        },
        "tie-large": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        },
        "slider": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        },
        "big-slider": {
          "url": "anything appropriate",
          "width": 290,
          "height": 147
        }
      }
    }],
    "comment_count": 0,
    "comment_status": "open",
    "thumbnail": "anything",
    "appropriate": {
      "views": [
        "2"
      ],
      "taq_review_button_text": [
        ""
      ],
      "taq_review_button_size": [
        "medium"
      ],
      "taq_review_button_shape": [
        "square"
      ],
      "taq_review_button_color": [
        "#c7c7c7"
      ],
      "taq_button_icon": [
        "fa fa-check"
      ],
      "taq_review_button_type": [
        "flat"
      ],
      "taq_review_button_url": [
        ""
      ],
      "taq_review_title": [
        ""
      ],
      "taq_review_position": [
        ""
      ],
      "taq_review_style": [
        "stars"
      ],
      "taq_review_summary": [
        ""
      ],
      "taq_review_total": [
        ""
      ],
      "tie_hide_meta": [
        ""
      ],
      "tie_hide_author": [
        ""
      ],
      "tie_hide_share": [
        ""
      ],
      "tie_hide_related": [
        ""
      ],
      "tie_hide_check_also": [
        ""
      ],
      "tie_sidebar_pos": [
        "default"
      ],
      "tie_sidebar_post": [
        "category lifestyle"
      ],
      "tie_post_head": [
        "none"
      ],
      "tie_post_slider": [
        "59602"
      ],
      "tie_googlemap_url": [
        ""
      ],
      "tie_video_url": [
        ""
      ],
      "tie_video_self": [
        ""
      ],
      "tie_embed_code": [
        ""
      ],
      "tie_audio_m4a": [
        ""
      ],
      "tie_audio_mp3": [
        ""
      ],
      "tie_audio_oga": [
        ""
      ],
      "tie_audio_soundcloud": [
        ""
      ],
      "tie_banner_above": [
        ""
      ],
      "tie_banner_below": [
        ""
      ],
      "tie_posts_num": [
        ""
      ],
      "post_color": [
        ""
      ],
      "post_background": [
        "anything appropriate"
      ],
      "tie_views": [
        "2"
      ]
    },
    "thumbnail_size": "thumbnail",
    "thumbnail_images": {
      "full": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      },
      "thumbnail": {
        "url": "anything appropriate",
        "width": 150,
        "height": 147
      },
      "medium": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      },
      "large": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      },
      "tie-small": {
        "url": "anything appropriate",
        "width": 55,
        "height": 55
      },
      "tie-medium": {
        "url": "anything appropriate",
        "width": 272,
        "height": 125
      },
      "tie-large": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      },
      "slider": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      },
      "big-slider": {
        "url": "anything appropriate",
        "width": 290,
        "height": 147
      }
    }
  }]
}


var newPost = {};
newPost.id = 65869;
newPost.categories = ["a", "b", "c", "d"];
newPost.author = {
  "name": "Jimbo",
  "last-name": "BobCat"
};

news.posts.push(newPost); //append the new post object.

document.write("<pre>" + JSON.stringify(news) + "</pre>")

为了说明我的意思,我创建了一个新的文章对象,并使用news.posts.push(newPost)进行了附加。 push用于将数据附加到数组中。

假设我有另一个重复的JSON文件,如下所示。我该如何将所有帖子对象附加到先前“帖子”数组的最后一个对象之后? - Ali Hayder

1
使用push方法。
// create the new object
var new_obj = {"key":"value", "next_key":"next_value"}

// append the new object to the array
posts.push(new_obj);

// display the values in the array
for (var i = 0; i < posts.length; i++) {
    console.log(posts[i]);
}

如果您想直接推入到您的JSON对象中,请使用以下方法:
json_obj.posts.push( new_obj);

从JSON数据中获取帖子数组,请使用以下代码:

```

posts_array = json_obj.posts;

1
如果您仔细观察操作,这就很简单了。您有一个对象,假设$scope.newsList = {}
$scope.newsList = {
    "status": "ok",
    "count": 2,
    "count_total": 4231,
    "pages": 2116,
    "posts": [
        {
          "id": 62296
        },
        {
          "id": 62297
        },
        {
          "id": 62296            
        },
        {
          "id": 62297
        }
    ]
};

为了简单起见,我假设您的帖子对象仅包含每个帖子的ID。现在,您可能已经附加了一个事件处理程序来处理滚动事件并一直获取新帖子。假设您获得了另一个与此类似的对象,并将它们存储在另一个作用域变量$scope.newNews中,并假设这与先前的对象$scope.newsList相同。
$scope.newNews= {
    "status": "ok",
    "count": 2,
    "count_total": 4231,
    "pages": 2116,
    "posts": [
        {
          "id": 62296
        },
        {
          "id": 62297
        },
        {
          "id": 62296            
        }
    ]
};

你的newslist数组中有4篇文章,newNews数组中有3篇新文章。当你将新文章追加到旧文章后,你的旧新闻数组应该有7篇文章。
  if( $scope.newNews.status == 'ok' && $scope.newNews.count > 0 ){
    var posts = $scope.newNews.posts;

    for(var key in posts) {
      if(posts.hasOwnProperty(key)){        
        $scope.newsList.posts.push(posts[key]);        
      }
    }
  }

首先,我们要检查新到达对象的状态是否为ok或其他,并且接收到的帖子数量是否为空。您的新闻对象包含我们感兴趣的帖子对象数组。我们可以通过$scope.newNews.posts访问该数组。这是帖子数组,我们需要处理它。现在我们已经得到了我们的数组,我们将继续进行一个循环,该循环将迭代我们到该数组的每个帖子元素,其中包含所有帖子对象。在那里,我们将检查属性是否存在(使用posts.hasOwnProperty(key))。如果在数组中存在属性key,则意味着索引key存在于数组中(这意味着value也存在于key中),我们将在旧新闻数组中推送该值。我们可以通过$scope.newsList .posts.push(posts[key]);访问此内容。

现在,如果您检查原始或旧帖子数组中的帖子列表,则应该获得所有帖子。

希望这可能会对您有所帮助。


嗨,@maksbd19,你的解决方案正是我所需要的,但很抱歉它没有正常工作。我已经为此设置了一个bin,请查看此链接 - Ali Hayder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接