[英]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.