Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与LINQ Any()等价的JavaScript/jQuery_Javascript_Jquery_Foreach_Ienumerable_Any - Fatal编程技术网

与LINQ Any()等价的JavaScript/jQuery

与LINQ Any()等价的JavaScript/jQuery,javascript,jquery,foreach,ienumerable,any,Javascript,Jquery,Foreach,Ienumerable,Any,JavaScript或jQuery中是否存在与IEnumerable.Any(谓词)等价的东西 我正在验证项目列表,如果检测到错误,我希望提前中断。我可以使用$进行操作。每个,但我需要使用外部标志来查看是否实际找到了该项目: var found = false; $.each(array, function(i) { if (notValid(array[i])) { found = true; } return !found; }); 有什么更好的办法

JavaScript或jQuery中是否存在与IEnumerable.Any(谓词)等价的东西

我正在验证项目列表,如果检测到错误,我希望提前中断。我可以使用
$进行操作。每个
,但我需要使用外部标志来查看是否实际找到了该项目:

var found = false;
$.each(array, function(i) {
    if (notValid(array[i])) {
        found = true;
    }
    return !found;
});

有什么更好的办法?我不喜欢在JavaScript数组中使用普通的
for
,因为它会迭代它的所有成员,而不仅仅是值。

你应该使用普通的
for
循环(而不是
for…in
),它只会循环数组元素。

你可以使用jQuery函数的变体,它接受一个谓词:

$(array).is(function(index) {
    return notValid(this);
});

我建议您使用
$.grep()
方法。它非常接近于
IEnumerable.Any(谓词)


这里有一个工作示例:。

我建议您尝试JavaScript
for in
循环。但是,请注意,该语法与使用.net
IEnumerable
时得到的语法大不相同。下面是一个小的说明性代码示例

var names = ['Alice','Bob','Charlie','David'];
for (x in names)
{
    var name = names[x];
    alert('Hello, ' + name);
}

var cards = { HoleCard: 'Ace of Spades', VisibleCard='Five of Hearts' };
for (x in cards)
{
    var position = x;
    var card = card[x];
    alert('I have a card: ' + position + ': ' + card);
}

熊的回答是正确的。进一步阐述他的回答:

jQuery的
.is(函数)
与.NET的
IEnumerable.Any(谓词)
具有相同的行为

发件人:

根据表达式检查当前选择,如果选择中至少有一个元素符合给定表达式,则返回true


现在,您实际上可以使用(ES5中的规范)来获得相同的效果:

array.some(function(item) {
    return notValid(item);
});

您可以使用array.filter(如需更多详细信息,请参阅下面的链接)


我相信OP想用普通的
for
(…)迭代它的所有成员,在
中使用
for有时可以(如果
数组.prototype
被扩展,或者如果你隐式地调整数组的大小)。实际上,
$.grep()
更像
FindAll(谓词)
@Groo:我没有说过
(谓词)
是最接近
grep()
的方法,只是非常接近。我同意
FindAll(谓词)
更接近它。但两者都很接近。*可能(我想你是说)@Simon_Weaver:不;他不应该使用
for in
来迭代数组。@SLaks,你误解了Simon_Weaver的评论!“你可以使用一个普通的for循环。”而不是“你应该…”我认为当用于
数组时,你应该避免在
is
函数中使用
this
。因为你不会得到原始类型(因此使用“==”进行比较将失败)。我会使用
数组[I]
来代替。看到这一点:这很有趣(my)但我的直觉反应是避免这种方法,因为它在一个不是jQuery选择(本机数组)的集合上运行选择函数
$.fn.is
。如果有像
$.is
这样的实用函数,我会觉得更安全,但这似乎是一个未记录的“特性”,因为jQuery选择是本机数组(或者至少他们使用了
Array.prototype
),可能有足够多的代码依赖它,它永远不会改变。这句话,这个答案已经有六年历史了。现在你应该使用附近显示的本机ES5方法,或者类似于LoDash/underline/等。它有专门用于处理本机JS数组的API。你是对的,我没有注意到t上的日期他的回答。对此很抱歉(现在我无法撤消我的否决票!)快速总结:
some()
对数组中的每个元素执行回调函数一次,直到找到回调返回真值的元素。如果找到这样的元素,
some()
立即返回真值。否则,
some()
返回false。如果您可以使用它,这是正确的答案。如果您需要IE8兼容性,那么这不是一个选项。更新:在ES6/ECMAScript 2015中,您可以执行
myArray.some(c=>c)
来精确模拟Linq对.Any()的操作。注意,在Linq中.Any()方法不需要委托,而.some()需要委托。尝试在没有委托的情况下调用.some()将导致错误,因为委托将未定义。
array.some(function(item) {
    return notValid(item);
});
[].filter(function(){ return true|false ;}).length > 0;