[英]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 : ETHBTC
和s : 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.