如何将更多对象添加到继续编号但不重新开始的对象数组中?

Posted

技术标签:

【中文标题】如何将更多对象添加到继续编号但不重新开始的对象数组中?【英文标题】:How to add more objects to an array of objects continuing the numbering but not start over? 【发布时间】:2022-01-21 18:51:02 【问题描述】:

我有这个小问题,但我很接近。

我有一个包含 100 个对象的对象数组。 [0-99]

我想在当前对象 99 的末尾再添加 100 个或更多对象。

我得到的是 [0-99], 100: [0-99]

让我给你看代码:

addEntry = (newEntry) => 

    let newSortedData = [];

    // Parse any JSON previously stored in allEntries
    let existingEntries = JSON.parse(sessionStorage.getItem("magic1")).data;
    if (existingEntries === null) 
        existingEntries;
    
    sessionStorage.setItem("magic1", JSON.stringify(newEntry));
    // Save allEntries back to local storage
    existingEntries.push(newEntry[0].data);

    console.log("existing entries with push for new ones: ", existingEntries);

    table.clear().draw();
    newSortedData.push(existingEntries);
    table.rows.add(_.sortBy(newSortedData, "title")); // Add new data
    table.columns.adjust().draw(); // Redraw the DataTable

    console.log("Existing and new ones sorted: ", newSortedData[0].data);

    sessionStorage.setItem("magic1", JSON.stringify(newSortedData[0].data));

;

我得到的是这样的:

magic1 从数组中的 100 个对象开始。我从中获取数据的地方有 7000 个项目/产品。我正在使用 php 从源中提取数据。它们仅出现在第 1 - 70 页中,每页包含 100 个对象。因此,有 7000 个对象。这是我不得不这样做的一种奇怪的方式,但我必须 PING 服务器超过 100、201、301、401、501、601 等等,通过对服务器的所有 70 次点击,一次 100 项。他们只是不能给我一个 getRowcount() 作为 SQL 的行数。我必须不断地 ping 或访问服务器,直到我得到一些少于 100 的项目,也就是说,我已经访问了少于 100 个的最后一页。

这是一个数组的结尾和新数组的开头。

我要做的就是保持附加额外的页面以继续计数,从 100、101、102 一直到 199。然后是 200、201、201 - 299 等等。显然 obj.push(newObj) 做了你在图片中看到的事情。

注意:当我看到这部分代码时:

existingEntries.push(newEntry[0].data);

existingEntries 和 newEntry[0].data 都只有对象。没有像 data: ... 这样的前缀。那么,为什么我不能按字母顺序按“标题”附加然后排序所有内容,使用 0 - 199 而不是 0-99、100: 0-99?

谢谢

【问题讨论】:

【参考方案1】:

如果newEntry[0].data 是一个数组,您可以将其展开:

existingEntries.push(...newEntry[0].data);

或者只使用 concat 而不是 push:

existingEntries.concat(newEntry[0].data)

【讨论】:

【参考方案2】:

我认为问题在于连接两个数组(existingEntriesnewEntry[0].data)。 Array.push() 不会合并两个数组,而是将另一个数组放在数组的末尾。

let a1 = ['a', 'b'], a2 = ['c', 'd'];
a1.push(a2);
console.log(a1) // ['a', 'b',  ['c', 'd']]

你可以使用Array.concat()来做。

let a1 = ['a', 'b'], a2 = ['c', 'd'];
a1 = a1.concat(a2);
console.log(a1) // ['a', 'b', 'c', 'd']

注意Array.concat() 返回一个新数组。

变化:

// this
existingEntries.push(newEntry[0].data);
// to this
existingEntries = existingEntries.concat(newEntry[0].data);

【讨论】:

以上是关于如何将更多对象添加到继续编号但不重新开始的对象数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组

如何在 C++ 中向向量中添加新对象

我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称

如何将对象添加到数组

核心数据 - 如何初始化对象但不将其添加到持久存储?

如何将对象添加到数组中?