【问题标题】:How to change an array elements property如何更改数组元素属性
【发布时间】:2016-09-09 17:50:59
【问题描述】:

这就是我所拥有的。我正在尝试更新我选择的数组元素中的 firstName 值。当我执行代码时,它只是将我尝试识别为属性的内容和所需的值添加到选定的数组元素中。

var _ = require('underscore');
var data = [
{id:1, firstName: 'John', lastName: 'Smith'},
{id:2, firstName: 'John', lastName: 'Doe'},
{id:3, firstName: 'Johnny', lastName: 'Smith'}
 ];

module.exports.lookupById = function(id, newName) {
console.log('Lookup By ID: ' +  (id));
Id = _.where(data, {id: id });
console.log(Id);    
newId = Id;
newId['firstName'] = newName;
console.log(newId);

此代码在执行上述代码的文件中

var foo = require('./hwa1');
foo.lookupById(2, 'Mary');

【问题讨论】:

  • 是 Lodash 还是 Underscore?什么版本?
  • 很抱歉没有放那个。是下划线。
  • _.where 不会返回您认为的结果,请尝试 _.find。此外,您还没有声明 IdnewIdnewId 是完全多余的
  • @MatthewKing 不,您应该阅读您打算使用的库和方法的文档

标签: javascript arrays underscore.js


【解决方案1】:

您可以通过常规循环来实现,检查以下代码:

var data = [
    {id:1, firstName: 'John', lastName: 'Smith'},
    {id:2, firstName: 'John', lastName: 'Doe'},
    {id:3, firstName: 'Johnny', lastName: 'Smith'}
];

function lookupById(id, newName) {
    _.each(data, function(item) {
         if(item.id === id) {
             item.firstName = newName
         }
    });
}

这将改变每个 id 符合条件的项目。

或者使用 findWhere 可以为您提供更简洁的代码:

function lookupById(id, newName) {
     var itemToChange = _.findWhere(data, { id: id });
     itemToChange.firstName = newName;
 }

这只会更改 id 与您的条件匹配的第一个项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2015-04-25
    • 2023-03-27
    • 2019-06-16
    • 2020-04-15
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多