Javascript通过对象的属性更新数组对象

标签 javascript ecmascript-6 lodash

我有一组人物对象,我想更新其中一个对象。

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对象的属性,可以是 id, name or age, value 是我要替换的值。

我想通过它的 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。

最佳答案

尝试:

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) {
	var person = persons.find(function(p) {
  	return p.id === id;
  });
  
  if (person && person[prop]) {
  	person[prop] = val;
  }
}

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

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

关于Javascript通过对象的属性更新数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42386263/

相关文章:

javascript - 如何使数组在 React Component 的表格中垂直输出?

javascript - 如何格式化带有前导零的数字?

javascript - 添加几个类实例到 'container'类属性对象

javascript - 过滤对象键和值

javascript - 用表情符号替换字符串的最有效方法

javascript - jQuery Ajax加载图片问题

javascript - 如何使用 Vuetify 在 Vue 中发出检查值

javascript - 将 proptypes 添加到未命名的匿名默认导出函数 - e.i "export default () =>{}"

javascript - Eslint 关于解构的警告

javascript - 使用 ES6/lodash 进行迭代和过滤