Javascript 我怎样才能模仿“a”;“中断”;在一个.forEach循环中?

Javascript 我怎样才能模仿“a”;“中断”;在一个.forEach循环中?,javascript,typescript,Javascript,Typescript,这是我想做的。然而,forEach中没有“continue” var que = null self.qs.forEach((q) => { if (q.synchronized == false) { que = q; break; // I would like to do this } }); // Now que would be set to the first no

这是我想做的。然而,forEach中没有“continue”

    var que = null
    self.qs.forEach((q) => {
        if (q.synchronized == false) {
            que = q;
            break; // I would like to do this
        }
    });
    //  Now que would be set to the first not synchronized

谁能告诉我怎么做。请注意,我使用的是最新的浏览器。请注意,我只在synchronized==true的数组中查找一个对象。对不起,我之前的问题中使用了“继续”。我正在寻找的功能是“break”。

您可以使用
Array.prototype。有些

简表:

self.qs.some((q) => {
   return (q.synchronized == false) && (que = q, true);
});
或:

或:

Array.prototype.some
返回第一个返回true的结果

Array.prototype.each
返回第一个返回false的结果

它们基本上是针对以下方面的测试:

  • some:是否至少有1项返回true
  • every:每个项目都返回true吗
你可以在这里滥用它来获得你想要的东西:-)

第三个示例是一点JS fu,但生成了一个很好的oneliner^_^

完整代码:

var que;
self.qs.some((q) => {
   if (q.synchronized == false)
   {
      que = q;
      return true;
   }
});
if (que) {
   // handle que here
}
未优化的肮脏黑客:

您还可以使用reduce来实现此目的:

var que = self.qs.reduce((result, q) => {
    if (que != null) return result;
    return (q.synchronized == false) ? q : result;
}, null);
// js-fu version
var que = self.qs.reduce((result,q) => que || (q.synchronized == false ? q : que),null);

非常未优化,但它节省了定义变量的时间。。。不过,它没有提前退出的功能。

您可以使用
Array.prototype。有些

简表:

self.qs.some((q) => {
   return (q.synchronized == false) && (que = q, true);
});
或:

或:

Array.prototype.some
返回第一个返回true的结果

Array.prototype.each
返回第一个返回false的结果

它们基本上是针对以下方面的测试:

  • some:是否至少有1项返回true
  • every:每个项目都返回true吗
你可以在这里滥用它来获得你想要的东西:-)

第三个示例是一点JS fu,但生成了一个很好的oneliner^_^

完整代码:

var que;
self.qs.some((q) => {
   if (q.synchronized == false)
   {
      que = q;
      return true;
   }
});
if (que) {
   // handle que here
}
未优化的肮脏黑客:

您还可以使用reduce来实现此目的:

var que = self.qs.reduce((result, q) => {
    if (que != null) return result;
    return (q.synchronized == false) ? q : result;
}, null);
// js-fu version
var que = self.qs.reduce((result,q) => que || (q.synchronized == false ? q : que),null);

非常未优化,但它节省了定义变量的时间。。。不过,它没有提前退出的功能。

使用
Array.prototype.find()

que = self.qs.find((q, i) =>  q.synchronized === true);
描述 find方法对数组中的每个元素执行一次回调函数,直到找到回调返回真值的元素为止如果找到这样的元素,则find立即返回该元素的值。否则,find返回未定义的值。仅对具有赋值的数组的索引调用回调;对于已删除或从未赋值的索引,不会调用它

var self={
“qs”:[{
同步:错误,
a:“b”
}, {
对,,
xyz:“abc”
}, {
对,,
xyz:“abc”
}, {
对,,
xyz:“abc”
}]
},
que=self.qs.find(函数(q,i,arr){
控制台日志(i);
返回q.synchronized===true
});

write(JSON.stringify(que,0,4))使用
Array.prototype.find()

que = self.qs.find((q, i) =>  q.synchronized === true);
描述 find方法对数组中的每个元素执行一次回调函数,直到找到回调返回真值的元素为止如果找到这样的元素,则find立即返回该元素的值。否则,find返回未定义的值。仅对具有赋值的数组的索引调用回调;对于已删除或从未赋值的索引,不会调用它

var self={
“qs”:[{
同步:错误,
a:“b”
}, {
对,,
xyz:“abc”
}, {
对,,
xyz:“abc”
}, {
对,,
xyz:“abc”
}]
},
que=self.qs.find(函数(q,i,arr){
控制台日志(i);
返回q.synchronized===true
});
write(JSON.stringify(que,0,4))有这样一句话:

注意:除了抛出异常之外,没有其他方法可以停止或中断forEach()循环如果需要这种行为,.forEach()方法是错误的工具,请改用普通循环。如果您正在测试数组元素的谓词,并且需要一个布尔返回值,那么可以使用each()或some()

(我的重点)

我认为,考虑到您只需查找第一个条目的要求,为什么不使用普通循环:

var que = null
for (var i = 0; i < self.qs.length; i++)
{
    if (!self.qs[i].synchronized) {
        que = self.qs[i];
        break;
    }
}
var que=null
对于(变量i=0;i
对于未来的代码维护者来说,简单、直接、易于理解的代码是什么。仅仅因为我们有像
forEach
some
reduce
等奇特的功能,并不意味着你必须在每一种情况下都使用它们。

注意:除了抛出异常之外,没有其他方法可以停止或中断forEach()循环如果需要这种行为,.forEach()方法是错误的工具,请改用普通循环。如果您正在测试数组元素的谓词,并且需要一个布尔返回值,那么可以使用each()或some()

(我的重点)

我认为,考虑到您只需查找第一个条目的要求,为什么不使用普通循环:

var que = null
for (var i = 0; i < self.qs.length; i++)
{
    if (!self.qs[i].synchronized) {
        que = self.qs[i];
        break;
    }
}
var que=null
对于(变量i=0;i

对于未来的代码维护者来说,简单、直接、易于理解的代码是什么。仅仅因为我们有像
forEach
一些
reduce
等奇特的函数,并不意味着你必须在每种情况下都使用它们。

为什么继续?只是
break或者您可以使用筛选器。对不起,我应该使用“中断”可能重复的“为什么继续?”?只是
break或者你可以使用过滤器。对不起,我应该使用“break”可能重复您提到的“some:至少有2项返回true”。然而,我正在寻找的是只返回1项的内容。