【问题标题】:Javascript lazy enumerableJavascript 惰性可枚举
【发布时间】:2021-08-08 14:21:42
【问题描述】:

有没有办法将常规数组转换为惰性枚举

我希望下面的代码只产生一个日志,而不是十个:

const items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];


items.map((i) => {
    console.log('expensive process');
    return i;
})
.findIndex((i) => true);

【问题讨论】:

  • 为了更准确地回答您的问题,请描述您的用例...
  • 我想做这样的事情 const goodChild = Array.from(parent.children).filter(calculateCondition).map(c => { child: c, area: calcArea(c) })[ 0]

标签: javascript arrays enumerable


【解决方案1】:

您可以使用Array.find方法在找到正确的一个元素后立即停止。

const items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];


items.find((i) => {
    if(i){
        console.log('expensive process');
    }
    
    return i;
});

【讨论】:

  • 我做不到,在最后一个 .find 之前有几个昂贵的 .map 和 .filter
  • @HeyyyMarco 你无法停止.map。您可以使用 yeild 暂停和恢复生成器功能。您可以使用异步/等待: const arr = [1, 2, 3]; const asyncRes = await Promise.all(arr.map(async (i) => { await sleep(10); return i + 1; }));控制台.log(asyncRes); // 2,3,4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 2013-04-09
  • 2017-07-12
  • 2013-12-03
  • 1970-01-01
  • 2011-03-22
  • 2013-01-08
相关资源
最近更新 更多