如何在javascript(lodash)中替换对象数组中的对象

sit*_*ith 4 javascript lodash

我有以下对象数组:

var arr = [
  {
    id    : "a1",
    guid  : "sdfsfd",
    ...
    value : "abc",
    status: false
  },
  {
    id    : "a2",
    guid  : "sdfsfd",
    ...
    value : "def",
    status: true
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

我有这个对象:

var obj = {
  id      : "a1",
  guid    : "sdfsfd",
  ...
  value   : "xyz",
  status  :  true
}
Run Code Online (Sandbox Code Playgroud)

我需要用"id"相同的对象替换数组中的对象.因此得到的数组将是:

var arr = [
  {
    id    : "a1",
    guid  : "sdfsfd",
    ...
    value : "xyz",
    status: true
  },
  {
    id    : "a2",
    guid  : "sdfsfd",
    ...
    value : "def",
    status: true
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

此外,如果具有该id的对象不存在,我需要将此对象添加到数组.

如何使用最少的lodash代码实现这一目标?寻找类似的东西

arr = _.merge_by_key(arr,obj,"id");
Run Code Online (Sandbox Code Playgroud)

gue*_*314 6

您可以使用 .findIndex()

var i = arr.findIndex(o => o.id === obj.id);
if (arr[i]) { arr[i] = obj } else { arr.push(obj) };
Run Code Online (Sandbox Code Playgroud)


sta*_*las 5

你可以做到 _.unionBy

var res = _.unionBy([obj], arr, 'id');
Run Code Online (Sandbox Code Playgroud)

但请在此评论中查看备注

  • 这非常有创意,但可能会比需要做更多的工作.它将搜索数组中的其余项目以删除重复项. (3认同)