相关疑难解决方法(0)

将Javascript迭代器转换为数组

我正在尝试使用Javascript EC6中的新Map对象,因为它已经在最新的Firefox和Chrome版本中得到支持.

但我发现它在"功能"编程中非常有限,因为它缺乏经典的地图,过滤器等方法,可以很好地配合一[key, value]对.它有一个forEach但不返回回调结果.

如果我可以将它map.entries()从MapIterator转换为一个简单的数组,那么我可以使用标准.map,.filter没有额外的黑客攻击.

将Javascript迭代器转换为数组是否有"好"的方法?在python中它就像做一样简单list(iterator)...但是Array(m.entries())返回一个以Iterator为第一个元素的数组!

编辑

我忘了指定我正在寻找一个适用于地图工作的答案,这意味着至少Chrome和Firefox(Array.from在Chrome中不起作用).

PS.

我知道有很棒的wu.js,但它对traceur的依赖让我失望......

javascript ecmascript-6

147
推荐指数
5
解决办法
6万
查看次数

从数组创建的生成器列表中获取

我有这个递归发生器

var obj = [1,2,3,[4,5,[6,7,8],9],10]

function *flat(x) {
    if (Array.isArray(x))
        for (let y of x)
            yield *flat(y)
    else
        yield 'foo' + x;

}

console.log([...flat(obj)])
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不喜欢这for部分.有没有办法在功能上写它?我试过了

if (Array.isArray(x))
   yield *x.map(flat)
Run Code Online (Sandbox Code Playgroud)

这没用.

有没有办法在没有for循环的情况下编写上述函数?

javascript yield generator ecmascript-6

13
推荐指数
1
解决办法
1604
查看次数

在同一次迭代中过滤和映射

我有这种简单的情况,我想过滤并映射到相同的值,如下所示:

 const files = results.filter(function(r){
      return r.file;
    })
    .map(function(r){
       return r.file;
    });
Run Code Online (Sandbox Code Playgroud)

为了节省代码行,以及提高性能,我正在寻找:

const files = results.filterAndMap(function(r){
  return r.file;
});
Run Code Online (Sandbox Code Playgroud)

这是否存在,或者我应该自己写点什么?我想在几个地方使用这样的功能,从来没有费心去研究它.

javascript functional-programming node.js

4
推荐指数
2
解决办法
1276
查看次数

为什么生成器不支持 map()?

这似乎完全自然的,我认为发电机,其功能非常像数组,应该支持非常基本的列表操作,如map()filter()reduce()。我错过了什么吗?

我为map它编写了代码,看起来很简单,但是将所有函数嵌入所有生成器中会更好:

let fancyGen = g => {
  let rv = function*() {
    for (let x of g) 
      yield x;
  }
  rv.map = function*(p) {
   for (let x of g) 
      yield p(x);
  } 
  return rv;
}
Run Code Online (Sandbox Code Playgroud)

我是生成器的新手,因此欢迎对代码提出任何意见。特别是,这是编写“身份生成器”的最佳方式吗?

iterator generator ecmascript-6 map-function

2
推荐指数
1
解决办法
460
查看次数