![](/img/trans.png)
[英]JavaScript: How to get all object values of an object without iterator
[英]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.