Lodash 将对象添加到已排序的对象数组

Sam*_*Sam 3 javascript arrays object node.js lodash

我正在寻找将一个对象添加到已经排序的对象数组中。因此,在将新对象添加到其中后,应该对新数组进行排序。

这是我基于对象属性 displayName 排序的数组

[
  {
    "id": "06BCCC25",
    "displayName":"Application"

  },
  {
    "id": "39F886D9", 
    "displayName":"Communication"
  },
  {
    "id": "22EA4ED5",
     "displayName":"Device"
  },
  {
    "id": "2F6E5FEA",
     "displayName":"Service"
  },
  {
    "id": "317BF72C", "displayName":"Service02"
  }

]
Run Code Online (Sandbox Code Playgroud)

现在我想添加

{
    "id": "07BSSC25",
    "displayName":"Mail"

  }
Run Code Online (Sandbox Code Playgroud)

所以添加后它将被放置在第 3 和第 4 个索引之间。

rsp*_*rsp 11

您可以使用_.sortedIndexBy()它,请参阅:

例如,您可以使用:

array.splice(_.sortedIndexBy(array, value, iteratee), 0, value);
Run Code Online (Sandbox Code Playgroud)

其中array是您的对象数组,value是要插入的新对象,iteratee是每个元素调用的函数,该函数返回您想要对其进行排序的值,但它也可以是属性名称。

所以在你的情况下,这样的事情应该有效:

array.splice(_.sortedIndexBy(array, value, 'displayName'), 0, value);
Run Code Online (Sandbox Code Playgroud)

只需将您的数组名称替换为array,并将新对象替换为value

另请参阅 GitHub 上的此问题,其中对此进行了解释:

如果你经常使用它,你也可以添加一个 lodash 函数,例如:

_.insertSorted = (a, v) => a.splice(_.sortedIndex(a, v), 0, v);
_.insertSortedBy = (a, v, i) => a.splice(_.sortedIndexBy(a, v, i), 0, v);
Run Code Online (Sandbox Code Playgroud)

你可以使用 - 在你的情况下

_.insertSorted(array, value, 'displayName');
Run Code Online (Sandbox Code Playgroud)