javascript - 使用 JavaScript 使用 lambda 和正则表达式查找数组中最常见的数字

标签 javascript regex lambda

我知道这个问题已被问过多次,但我没有找到所需的解决方案。

我的任务是找到数组中出现次数最多的数字。首先,我必须转换为数字,因为我们的输入是以字符串形式给出的。之后,我使用 lambda 表达式对数组进行排序。 (我不明白它是如何工作的,我只知道它是这样的)。现在我想过滤数组 [ 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 9, 13 ] 所以只有 [4, 4, 4, 4, 4]离开了。我想使用 .filter.reduce

function z(input) 
{
let numbers = input.map(n => +n)
                   .sort((a, b) => a - b)
                   .filter();

console.log(numbers);
}
z(['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3']);

如果有人可以解释一下:

function mode(arr){
    return arr.sort((a,b) => 
          arr.filter(v => v===a).length 
        - arr.filter(v => v===b).length
    ).pop();
}

mode(['pear', 'apple', 'orange', 'apple']); // apple

arr.sort 上的回调需要两个参数 a 和 b,但是之后我无法理解发生了什么。

事实上,任何有关如何使用 lambda 的指南都将受到赞赏。

最佳答案

您可以使用Map用于收集具有相同值的元素,并通过检查数组的长度并根据先前存储的结果检查实际长度来采用单循环方法。

这种方法考虑了如果多个值具有相同长度的可能性,则所有数组都以最大长度返回。

const z = a => {
        var m = new Map;
        return a.reduce((r, v, i) => {                            // create map
            var array = m.get(v) || m.set(v, []).get(v);          // get/create array
            array.push(v);                                        // push value
            if (!i || r[0].length < array.length) {               // take first or check
                return [array];                                   // return array
            }
            if (r[0] !== array && r[0].length === array.length) { // prevent push same a
                r.push(array);                                    // push with same len
            }
            return r;
        }, undefined);
    };

console.log(z(['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3']));
console.log(z(['pear', 'apple', 'orange', 'apple']));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用 JavaScript 使用 lambda 和正则表达式查找数组中最常见的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48140034/

相关文章:

java - 简单的 Java 正则表达式在两者之间读取

javascript - Mocha Chai - 确认 Body 中有一个 'name' 属性

javascript - 使用 JXA 访问对象的属性

javascript - 使用正则表达式检查有效的日期组合?

java - 带有 "or"运算符的正则表达式多个字符串

regex - Perl正则表达式-gc修饰符是什么意思?

java - 为 Jinq 创建查询时是否可以使用 Predicate<T> ?

c# - @Html.EditorFor(m => m) MVC 中的 lambda 语法

具有多个语句的 Java 8 Lambda Stream forEach

javascript - 如何在 Javascript 中向文本区域添加多个值?