簡體   English   中英

如果我知道對象的其他屬性,則在數組中查找對象並更改其屬性

[英]Find object in array and change its property if I know its other property

我有一個對象數組,我需要一個函數,該函數通過objects屬性(在示例中為id )找到一個數組並更改其其他屬性(在name中為name )。 目前,我的實現如下所示:

var arrayOfObjects = [{
    id: 1,
    name: 'Alpha'
}, {
    id: 2,
    name: 'Bravo'
}];

var setNameById = function (id, newName) {
    arrayOfObjects.filter(function(obj) {return obj.id === id;}).name = newName;
};

console.log(JSON.stringify(arrayOfObjects)); // initial array logged
setNameById(2, 'Charlie');
console.log(JSON.stringify(arrayOfObjects)); // initial array logged

我了解問題出在更改由過濾器而不是初始對象返回的對象,但是我沒有找到在這種情況下可以訪問初始對象的實現,是否有可能還是我需要重新考慮以下步驟引導我到了這一點。

使用它代替過濾器。 過濾產生新的數組。

arrayOfObjects.forEach(function(v){
  if (v.id == id) {v.name = newName}
});

Array#filter使用Array#forEach

請注意,應使用=====進行比較, =將分配值!

帶條件的Array#forEach應該足以更新現有的對象數組。

 var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function(id, newName) { var filtered = arrayOfObjects.filter(function(obj) { return obj.id == id; }); filtered.forEach(function(el) { el.name = newName; }); return filtered; }; console.log(JSON.stringify(arrayOfObjects)); var filtered = setNameById(2, 'Charlie'); console.log(JSON.stringify(filtered)); 

使用Array#map

 var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function(id, newName) { return arrayOfObjects.filter(function(obj) { return obj.id == id; }).map(function(el) { el.name = newName; return el; }); }; console.log(JSON.stringify(arrayOfObjects)); var filtered = setNameById(2, 'Charlie'); console.log(JSON.stringify(filtered)); 

過濾器返回一個數組。 因此,必須在您的方法中使用index

您的方法

 var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function(id, newName) { arrayOfObjects.filter(function(obj) { return obj.id = id; })[0].name = newName; }; console.log(JSON.stringify(arrayOfObjects)); // initial array logged setNameById(2, 'Charlie'); console.log(JSON.stringify(arrayOfObjects)); 

查找數組

如果確定只返回一個值,請使用array.find

 var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function(id, newName) { arrayOfObjects.find(function(obj) { return obj.id = id; }).name = newName; }; console.log(JSON.stringify(arrayOfObjects)); // initial array logged setNameById(2, 'Charlie'); console.log(JSON.stringify(arrayOfObjects)); 

array.forEach

如果可以使用相同的搜索關鍵字(在這種情況下為id),不止一個對象,請使用array.forEach而不是array.filter ,然后遍歷過濾后的數組

 var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function(id, newName) { arrayOfObjects.forEach(function(obj) { if(obj.id = id) obj.name = newName; }); }; console.log(JSON.stringify(arrayOfObjects)); // initial array logged setNameById(2, 'Charlie'); console.log(JSON.stringify(arrayOfObjects)); 

暫無
暫無

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

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