所以我有一个像这样的对象数组:
var arr = [
{uid: 1, name: "bla", description: "cucu"},
{uid: 2, name: "smth else", description: "cucarecu"},
]
uid
是此数组中对象的唯一ID。我正在寻找一种优雅的方法来修改对象,如果我们拥有带有给定uid,
的对象,或者如果数组中不存在uid
则添加一个新元素。我想像该功能在js控制台中的行为:
> addOrReplace(arr, {uid: 1, name: 'changed name', description: "changed description"}) > arr [ {uid: 1, name: "bla", description: "cucu"}, {uid: 2, name: "smth else", description: "cucarecu"}, ] > addOrReplace(arr, {uid: 3, name: 'new element name name', description: "cocoroco"}) > arr [ {uid: 1, name: "bla", description: "cucu"}, {uid: 2, name: "smth else", description: "cucarecu"}, {uid: 3, name: 'new element name name', description: "cocoroco"} ]
我目前的方式似乎并不十分优雅和实用:
function addOrReplace (arr, object) { var index = _.findIndex(arr, {'uid' : object.uid}); if (-1 === index) { arr.push(object); } else { arr[index] = object; } }
我正在使用lodash,所以我想到了带有自定义相等性检查的修改后的
_.union
之类的东西。
所以我有一个这样的对象数组:var arr = [{uid:1,名称:“ bla”,描述:“ cucu”}},{uid:2,名称:“ smth else”,描述:“ cucarecu “},] uid是此对象中对象的唯一ID ...
您可以使用对象而不是数组
第一种方法,由于findIndex()
,不需要Lodash:
旧帖子,但为什么不使用过滤器功能?
也许
我个人不喜欢修改原始数组/对象的解决方案,所以这就是我所做的:
如何使数组的索引与getItem()
相同?例如: