簡體   English   中英

如何根據對象值從數組中刪除特定對象

[英]How can I remove a specific object from my array based on object values

我在javascript中有以下對象數組。

[{
     's': 'ETHBTC',
     'q': 123456
},
{
     's': 'XMLBTC',
     'q': 545454
},
{
     's': 'ETHBTC',
     'q': 123451
}]

我想根據以下條件刪除重復的對象:如果所有對象都具有相同的鍵s值,我想保留唯一一個具有最高鍵值q 在上面的示例中,我只想保留

[{
     's': 'ETHBTC',
     'q': 123456
},
{
     's': 'XMLBTC',
     'q': 545454
}]

因為它對於鍵s : ETHBTCs : XMLBTC具有最高的鍵q值,所以我將其推入數組。 最好的方法是什么?

我將reduce為一個由s索引的對象,檢查該索引處的當前對象(如果有)是否具有較高或較低的q ,然后獲取結果的Object.values將該值轉換回數組:

 const input = [{ 's': 'ETHBTC', 'q': 123456 }, { 's': 'XMLBTC', 'q': 545454 }, { 's': 'ETHBTC', 'q': 123451 }]; console.log( Object.values( input.reduce((a, item) => { const { s, q } = item; if (!a[s] || a[s].q < q) a[s] = item; return a; }, {}) ) ); 

與ES5兼容的解決方案:

 var input = [{ 's': 'ETHBTC', 'q': 123456 }, { 's': 'XMLBTC', 'q': 545454 }, { 's': 'ETHBTC', 'q': 123451 }]; var outputObj = input.reduce(function (a, item) { var s = item.s, q = item.q; if (!a[s] || a[s].q < q) a[s] = item; return a; }, {}); console.log( Object.keys(outputObj).map(key => outputObj[key]) ); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM