【问题标题】:Javascript Update object of array by attribute of the objectJavascript通过对象的属性更新数组的对象
【发布时间】:2017-02-22 08:28:51
【问题描述】:

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

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。

【问题讨论】:

标签: javascript ecmascript-6 lodash


【解决方案1】:

试试:

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);

【讨论】:

    【解决方案2】:

    你可以用这个:

    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)

    【讨论】:

      【解决方案3】:

      使用lodash,你可以做喜欢,

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

      【讨论】:

        猜你喜欢
        • 2019-05-29
        • 2016-07-26
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2012-03-16
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多