JavaScript 查找数组中的单个元素

标签 javascript arrays linq

.NET 的 LINQ 包含一个运算符 .Single哪个

Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence.

最新版本的 JavaScript 中是否有等效项? (撰写本文时为 ECMA v8)。

我能找到的最接近的操作是 .find尽管人们必须编写自己的样板来断言恰好有一个元素匹配。

.single() 的预期功能示例:

const arr = [1, 4, 9];
arr.single(v => v > 8 && v < 10);   // Returns 9
arr.single(v => v < 5);             // Throws an exception since more than one matches
arr.single(v => v > 10);            // Throws an exception since there are zero matches

最佳答案

Is there an equivalent in the latest version of JavaScript? (ECMA v8 at time of writing).

不,不是。

您可以更改 Array 的原型(prototype)(这是不可取的)并添加一个方法来过滤数组并返回单个找到的项目或抛出错误。

Array.prototype.single = function (cb) {
    var r = this.filter(cb);
    if (!r.length) {
        throw 'zero match';
    }
    if (r.length !== 1) {
        throw 'too much matches';
    }
    return r[0];
};

const arr = [1, 4, 9];
console.log(arr.single(v => v > 8 && v < 10)); // 9
console.log(arr.single(v => v < 5));           // exception since more than one matches
// console.log(arr.single(v => v > 10));       // exception since there are zero matches

或者您可以使用 link.js .

const arr = [1, 4, 9];
console.log(Enumerable.From(arr).Single(v => v > 8 && v < 10)); // 9
console.log(Enumerable.From(arr).Single(v => v < 5));           // exception since more than one matches
// console.log(Enumerable.From(arr).Single(v => v > 10));       // exception since there are zero matches
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>

关于JavaScript 查找数组中的单个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50853114/

相关文章:

javascript - 如何对父浏览器窗口进行远程函数调用?

c - 为什么要检查函数中 fscanf 返回值 < 1?

java - Android 数组不工作的测验

c# - 使用 Linq 和 Lambda 包含默认值

.net - 用简短的语言解释为什么需要 IQueryable<T>

c# - 列名称无效。该名称从未在代码中实现

javascript - 用于匹配多行中特定单词后的单词的正则表达式

javascript - 如何在 promise 中设置 react 钩子(Hook)的值(value)?

javascript - 如何对 workboxSW 预缓​​存项使用 staleWhileRevalidate?

javascript - TypeError .val() 不是我在 Javascript 上选择的答案中的函数