如果存在则更新,或者向对象数组添加新元素-javascript + lodash中的优雅方式

问题描述 投票:18回答:6

所以我有一个像这样的对象数组:

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 ...

javascript arrays underscore.js lodash
6个回答
12
投票

您可以使用对象而不是数组


12
投票

第一种方法,由于findIndex(),不需要Lodash:


4
投票

旧帖子,但为什么不使用过滤器功能?


3
投票

也许


2
投票

我个人不喜欢修改原始数组/对象的解决方案,所以这就是我所做的:


1
投票

如何使数组的索引与getItem()相同?例如:

© www.soinside.com 2019 - 2024. All rights reserved.