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检索的).
| 归档时间: |
|
| 查看次数: |
15143 次 |
| 最近记录: |