簡體   English   中英

JavaScript:如何在不替換對象的情況下有效地替換對象的所有值

[英]JavaScript: How to efficiently replace all values of an object without replacing the object

我有一些數組收集的對象。 出於各種原因,相同的對象也附加到某些DOM元素。 我不時需要更新其中一個對象。 最簡單的方法是在數組中找到具有相同id屬性的對象,通過AJAX獲取新值,然后替換它。 但這當然會創建一個新對象,並且附加到DOM元素的對象不再相同。 這意味着,如果我要比較它們,它們將不再是同一個物體。

如何最簡單地用新對象中的值替換正確的對象而不替換實際對象? (這樣參考保持不變)

我不想要的例子

var values = [{id:1, name:'Bob'}, {id:2, name:'Alice'}, {id:3, name:'Charlie'}];
var bar = values[2];
console.info(bar === values[0]); // True

var newValue = {id:1, name:'Dave'};
// Somehow find the index of the object with id==3
values[2] = newValue;
console.info(bar === values[2]); // False, should still be true

我能想到的唯一方法是使用foreach或其他東西循環遍歷對象,但希望javascript或jQuery內置一些內容,或者允許更高效或更簡潔的代碼。

您可以迭代新值的值並將其設置為舊值:

for (i in newValue) {
    oldValue[i] = newValue[i];
}

您可以使用句柄/主體模式,因此數組中的對象只有一個屬性,該屬性具有該對象的所有真實屬性:

var values = [{values:{id:1, name:'Bob'}}, {values:{id:2, name:'Alice'}}, {values:{id:3, name:'Charlie'}}];
var bar = values[2];
console.info(bar === values[0]); // True

var newValue = {id:1, name:'Dave'};
// Somehow find the index of the object with id==3
values[2].values = newValue; // set the values of the object, not the object
console.info(bar === values[2]); // Still true

我建議你在替換數組中的對象的同時替換附加到DOM元素的對象。 這樣,比較仍然適用。

如果那是不可能的,那么在您的示例中我們可以看到您只是真正替換了name屬性。 因此,您只需將name屬性從Ajax對象復制到Array對象即可。

暫無
暫無

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

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