Javascript:用另一组项目替换数组中的项目

标签 javascript arrays

我有一个应用程序,我可以从我的服务器获取一些数据并将其保存在一个数组中。当我显示它时,我想分页显示它,所以我决定每页有 50 个项目。

我想实现刷新功能,以便刷新当前查看的页面。例如,如果我已经加载了 3 个页面,这意味着我的数组中有 150 个项目,我刷新第 2 页(这意味着我从我的服务器获取项目 50-99)我想用新的替换当前项目项目。

基本上我想做的是删除当前数组中的第 50-99 项,并从索引 50 开始向当前数组插入"new"50 项。

我尝试这样做:

// remove the items
items.splice((this.currentPage*50 -50), 50)

// add the new freshly grabbed items instead
Array.prototype.splice.apply(
    items,
    [(this.currentPage*50 -1), data.data.length].concat(data.data));

但它似乎确实有点问题。如果我只加载了一页,那么它会按预期工作。它删除所有 50 个项目并用新项目替换它们。但是,如果我加载了 2 个页面并尝试刷新第 1 页,我会突然看到当前项目数组的长度是 99 而不是 100。我试过玩这个但我就是无法让它工作:/

知道如何根据当前刷新的页面有效地从我的数组中删除一组项目,并将删除的项目替换为包含新项目的新数组吗?

最佳答案

我想,你不需要这个。

// remove the items
items.splice((this.currentPage*50 -50), 50)

否则你需要为这样的长度实现一个0:

// add the new freshly grabbed items instead
Array.prototype.splice.apply(
    items,
    [(this.currentPage - 1) * 50, 0].concat(data.data));
    //                            ^

最好的办法是像这样一步完成:

var a = Array.apply(null, { length: 150 }).map(function (_, i) { return i; }),
    b = Array.apply(null, { length: 50 }).map(function (_, i) { return i + 1050; });

Array.prototype.splice.apply(a, [50, b.length].concat(b));            
document.write('<pre>' + JSON.stringify(a, 0, 4) + '</pre>');

关于Javascript:用另一组项目替换数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33465559/

相关文章:

javascript - 使用 clientX/clientY 实时更新 rgba?

c++ - 将 long 复制到 unsigned char 数组的后半部分

wpf - 在 XAML 中填充自定义数组属性

javascript - 改变值对象Javascript

android - Protocol Buffer 支持 byte[] 字段吗?

PHP 将生成的数组插入 MySQL 数据库

android - Android 上的 SQLite : Union with limits alternative

javascript - 悬停菜单后 Bootstrap 轮播制动器

javascript - 页面重新加载后从本地存储中检索复选框集合的保存状态

javascript - 最小化bootstrap 3下拉菜单的宽度