[英]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));
如果可以使用相同的搜索關鍵字(在這種情況下為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.