2015-11-01 25 views
1

我有一個應用程序,我從我的服務器獲取一些數據並保存在一個數組中。當我顯示它時,我想顯示它分頁,所以我決定每頁有50個項目。Javascript:用另一組項目替換項目

我想實現刷新功能,以便刷新當前查看的頁面。例如,如果我已經加載了3頁,這意味着我的數組中有150個項目,並且我刷新了頁面2(這意味着我從我的服務器獲取項目50-99)我想用新的項目替換當前項目項目。

基本上就是我想要做的是去除項目50-99在我目前的陣列,並插入「新」的50項到當前數組索引處開始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)); 

但它似乎工作有點兒越野車。如果我只有1頁加載,那麼它按預期工作。它刪除所有50個項目並用新項目替換它們。但是,如果我有2個頁面加載,我嘗試刷新頁面1,我可以突然看到,當前items數組的長度是99而不是100.我嘗試玩,但我不能得到它的工作:/

任何想法如何能夠基於當前刷新的頁面從我的數組中有效地刪除一組項目,並用包含新項目的新數組替換已刪除的項目?

+0

您是否需要從數組中刪除值?或者你可以迭代這些元素並設置它們嗎? – Marc

回答

2

我想,你不需要這個。

// 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>');

+0

看來,如果我從'this.currentPage * 50 -1'中刪除了'-1'(並且得到的計數「50」就像您的答案所示),它會刪除並添加50個元素。現在唯一的問題是,現在看起來我現在將頁面2作爲頁面1和頁面1作爲頁面2(頁面以某種方式交換,這意味着新項目將被附加到數組的末尾而不是我需要的位置 – kfirba

+0

我的意思是用'-50'替換'-1',現在我們從位置0開始(1 * 50 - 50 = 0),對於頁面2我們從位置50開始(2 * 50 -50 = 50) – kfirba

+0

你說得對,我只是需要通過刪除項目,我覺得它很奇怪,會有'splice'覆蓋元素嗎?如果我告訴它從索引'50'開始並添加'30'項目有物品'51,52,53,54,...,80'是否會刪除這些物品並替換爲新物品或將它們推入索引? – kfirba