如何在javascript中替换数组中的特定对象?

ada*_*ort 8 javascript underscore.js

我有一系列用户,我想更新其中一个用户.

users = [
  {userId: 23, userName:"foo"},
  {userId: 34, userName:"wrong"},
  {userId: 45, userName:"baz"}
  {userId: 56, userName:"..."},
]

updatedUser = {
  userId: 34,
  userName: bar
}
Run Code Online (Sandbox Code Playgroud)

我正在使用underscorejs.我认为最简单的方法是找到要更新的用户的索引,然后将该用户的值设置为我更新的值.不幸的是,下划线的indexOf函数不接受属性,只接受值.要使用它,我必须首先用户findWhere然后将返回的内容传递给indexOf:

var valueOfUpdatedUser = _.findWhere(users, { userId: updatedUser.userId })
var indexOfUpdatedUser = _.indexOf(users, valueOfUpdatedUser)
users[indexOfUpdatedUser] = updatedUser;
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用reject删除匹配的用户,然后将我更新的用户推送到阵列.

当然有更好,更简单的方法吗?

Jon*_*Jon 26

你可以用extend之后findWhere.它在技术上与完全用另一个实例替换对象不同,但它消除了数组上的额外循环:

_.extend(_.findWhere(users, { userId: updatedUser.userId }), updatedUser);
Run Code Online (Sandbox Code Playgroud)

如果这仍然不能令人满意,那么您最好的选择可能是手动迭代.

我故意将"用户ID键入的对象属性"方法排除在讨论之外,因为在实践中,手头有一个数组并不常见(例如,用户数组是由API检索的).