2017-02-22 223 views
1

我有一個人物對象的數組,我想更新其中一個對象。Javascript更新對象的數組按對象的屬性

persons: [{ 
    id: '1', 
    name: 'John', 
    age: 12 
    }, { 
    id: '2', 
    name: 'Tom', 
    age: 13 
    }, { 
    id: '3', 
    name: 'David', 
    age: 14 
}] 

我所擁有的功能是:

function updatePersonsWith(id, propName, value) { 
    this.persons.??? 
} 

傳輸的參數我想更新的人idpropNameperson對象的屬性,可以idnameagevalue是我想要替換的價值。

我想通過它的id找到一個對象,只更新這個數組的對象。

updatePersonsWith(2, age, 16) 

其結果將是:

persons: [{ 
    id: '1', 
    name: 'John', 
    age: 12 
    }, { 
    id: '2', 
    name: 'Tom', 
    age: 16 
    }, { 
    id: '3', 
    name: 'David', 
    age: 14 
}] 

可能是ES6或使用lodash。

+0

的可能重複[我怎樣才能更新基於鍵值JavaScript數組的行?(http://stackoverflow.com/問題/ 16148150 /如何-可以-I-更新一個排-IN-A-JavaScript的基於陣列的上-A-鍵值) – RaR

回答

4

嘗試:

let person = this.persons.find((person) => { 
    return person.id === id; 
}); 

if (person && person[propName]) { 
person[propName] = value; 
} 

工作例如:

var persons = [{ 
 
    id: '1', 
 
    name: 'John', 
 
    age: 12 
 
    }, { 
 
    id: '2', 
 
    name: 'Tom', 
 
    age: 13 
 
    }, { 
 
    id: '3', 
 
    name: 'David', 
 
    age: 14 
 
}]; 
 

 
function update(id, prop, val) { 
 
\t var person = persons.find(function(p) { 
 
    \t return p.id === id; 
 
    }); 
 
    
 
    if (person && person[prop]) { 
 
    \t person[prop] = val; 
 
    } 
 
} 
 

 
update('1', 'age', 77); 
 

 
console.log(persons[0].age);

3

您可以使用此:

let persons = [{ 
 
    id: '1', 
 
    name: 'John', 
 
    age: 12 
 
    }, { 
 
    id: '2', 
 
    name: 'Tom', 
 
    age: 13 
 
    }, { 
 
    id: '3', 
 
    name: 'David', 
 
    age: 14 
 
}]; 
 

 

 
function updatePersonsWith(id, propName, value) { 
 
    let item = persons.find((v) => { 
 
     return v.id == id; 
 
    }); 
 
    if (item && item.hasOwnProperty(propName)) { 
 
     item[propName] = value; 
 
    } 
 
}; 
 

 
updatePersonsWith(2, 'age', 16); 
 
console.log(persons)

1

使用lodash,你可以這樣做,

function updatePersonsWith(id, propName, value) { 
    var match = _.find(persons , function(person) { return person.id === id }); 
    if(match) 
     match[propName] = value; 
} 
相關問題