簡體   English   中英

獲取下一個數組元素

[英]Get next array element

假設我想用裝飾器數組替換對象的數組:

var arr = [{id:1, text: "text1"}, {id:2, text: "text2"}, {id:3, text: "text3"}]; 

arr.forEach(function(el, idx){
  var newEl = new NewEl(el.id, el.text, arr[idx + 1], idx); 
  arr[idx] = newEl; 
}, this); 

console.log(arr); 

function NewEl(id, text, nextEl, idx){
  this.id = id; 
  this.text = text; 
  this.next = nextEl; 
} 

nextEl仍將引用舊對象,而不是數組中的下一項(無論該元素如何)。
如何將對數組中下一個元素(位置)的引用傳遞給構造函數?

注意:如果可能的話,我不希望通過修改循環內的邏輯來使用變通方法(變通方法涉及在下一次迭代時在前一個元素上設置“ next”)。

可能嗎?

在創建參考之前,您不能使用參考(我確定這是顯而易見的)。 因此,不更改循環以查看前一個就很難解決。 但是,如果必須解決問題而不查看先前創建的項目,則可以更改NewEl以接收完整的數組下一個索引,而不是實際的引用。 類似於以下內容:

function NewEl(id, text, arr, nextIndex){
    this.id = id; 
    this.text = text; 
    this.arr = arr;
    this.nextIndex = nextIndex; 
}

NewEl.prototype.getNext = function(){
    return this.arr[this.nextIndex];
}; 

這樣的想法是,您可以在創建引用之前使用引用的唯一方法是實際上不使用引用,而是存儲以后使用它的方式。 但這是一種糟糕的方法,因為對數組的任何更改都會破壞getNext()函數。

tldr; 您實際上應該只更改循環,以引用下一次迭代中的上一項。

你也可能會這樣

var arr = [{id:1, text: "text1"}, {id:2, text: "text2"}, {id:3, text: "text3"}];
arr.reduceRight((p,c) => (c.next = p,c));
arr.reduce((p,c) => (c.prev = p,c));

由於您在一個評論中提到您也希望以前的評論,所以我也添加了prev屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM