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)