过滤嵌套数组-JavaScript

Jrobm2k9

我有一个嵌套数组,每个数组都有一个字符串和一个整数,某些数组中的字符串是相同的,但我想过滤该数组,使其只包含具有唯一名称且具有最高值的嵌套数组。这是我所拥有和想要的示例:

[['a', 1],['a', 2],['a', 3],['b',2],['b',5]]

我想做的是过滤器,使其包含以下内容:

[['a', 3],['b', 5]]

我最初尝试使用for循环和if语句,然后使用for循环和while语句来执行此操作,当我查看过滤时,但是我不确定如何在将字符串保持最高值的地方实现该方法,请救命!!!!

妮娜·斯科茨(Nina Scholz)

您可以Map对第一个元素进行分组,然后通过检查存储的值来获取最大值。

var array = [['a', 1], ['a', 2], ['a', 3], ['b', 2], ['b', 5]],
    result = Array.from(
        array.reduce((m, [k, v]) => m.set(k, m.has(k) ? Math.max(v, m.get(k)) : v), new Map)
    );
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

如果您想保留原始数组,则可以存储该数组而不是值,然后只获取地图的值。

var array = [['a', 1], ['a', 2], ['a', 3, 'bar'], ['b', 2], ['b', 5, 'foo']],
    result = Array.from(array
        .reduce(
            (m, a) => m.has(a[0]) && m.get(a[0])[1] > a[1] ? m : m.set(a[0], a),
            new Map
        )
        .values()
    );
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章