【问题标题】: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?

谢谢

【问题讨论】:

    标签: javascript json


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2012-11-16
        • 2021-12-29
        • 2020-09-01
        • 2022-01-16
        • 2013-01-03
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多