相关疑难解决方法(0)

将ES6 Iterable转换为Array

假设你有一个类似数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,将它转换为Javascript数组的最佳方法是什么?

这样做的原因是许多js库(如下划线和lodash)仅支持Arrays,因此如果您希望在Iterable上使用它们的任何函数,则必须首先将其转换为Array.

在python中,您可以使用list()函数.在ES6中是否有相同的东西?

javascript arrays iterable ecmascript-6 babeljs

70
推荐指数
3
解决办法
4万
查看次数

对于多维javascript数组中的循环

从现在开始,我正在使用这个循环迭代数组的元素,即使我在其中放置具有各种属性的对象,它也能正常工作.

var cubes[];

for (i in cubes){
     cubes[i].dimension
     cubes[i].position_x
     ecc..
}
Run Code Online (Sandbox Code Playgroud)

现在,让我们假设cubes []以这种方式声明

var cubes[][];
Run Code Online (Sandbox Code Playgroud)

我可以在Javascript中执行此操作吗?我怎样才能自动迭代

cubes[0][0]
cubes[0][1]
cubes[0][2]
cubes[1][0]
cubes[1][1]
cubes[1][2]
cubes[2][0]
ecc...
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我可以声明:

var cubes[];
var cubes1[];
Run Code Online (Sandbox Code Playgroud)

并与两个数组分开工作.这是更好的解决方案吗?

javascript loops multidimensional-array

31
推荐指数
5
解决办法
12万
查看次数

Immutable.js或Lazy.js执行捷径融合吗?

首先,让我为那些不认识的人定义什么是捷径融合.在JavaScript中考虑以下数组转换:

var a = [1,2,3,4,5].map(square).map(increment);

console.log(a);

function square(x) {
    return x * x;
}

function increment(x) {
    return x + 1;
}
Run Code Online (Sandbox Code Playgroud)

这里我们有一个数组,[1,2,3,4,5]其元素首先被平方,[1,4,9,16,25]然后递增[2,5,10,17,26].因此,虽然我们不需要中间数组[1,4,9,16,25],但我们仍然创建它.

捷径融合是一种优化技术,它可以通过将一些函数调用合并为一个来消除中间数据结构.例如,可以将快捷融合应用于上述代码以产生:

var a = [1,2,3,4,5].map(compose(square, increment));

console.log(a);

function square(x) {
    return x * x;
}

function increment(x) {
    return x + 1;
}

function compose(g, f) {
    return function (x) {
        return f(g(x));
    };
}
Run Code Online (Sandbox Code Playgroud)

如您所见,通过组合和函数将两个单独的map调用融合到一个map调用中.因此,不创建中间阵列.squareincrement


现在,我理解像Immutable.jsLazy.js这样的库在JavaScript中模仿延迟评估.延迟评估意味着仅在需要时计算结果. …

javascript lazy-evaluation immutable.js lazy.js

31
推荐指数
1
解决办法
2813
查看次数

在“地图”上使用地图功能更改值

我可以使用Map然后设置值:

const a = new Map([["a", "b"], ["c", "d"]])
Run Code Online (Sandbox Code Playgroud)

现在,如果我想以一种功能性的方式(不带for ... of.forEach)将一个功能应用于所有值,我想我可以做这样的事情:

const b = a.map(([k, v]) => [k, doSomethingWith(v)]);
Run Code Online (Sandbox Code Playgroud)

但是上没有任何map功能Map。是否有内置/优雅的映射方式Map

javascript dictionary ecmascript-6

11
推荐指数
1
解决办法
617
查看次数

在ES6生成器中使用ES5数组方法

在ES6生成器中使用新ES5阵列功能的正确方法是什么?我是否必须先将iterable显式转换为数组,还是有更好的方法?例如:

function* range(low, high) {
    var i = low;
    while(i < high)
        yield i++;
}

// Sum of numbers in range, doesn't work
console.log(range(0, 10).reduce((x,y) => x + y));
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

8
推荐指数
2
解决办法
1356
查看次数

在 javascript 中,从迭代器创建数组

给定 an iterator,创建 an 的最佳方法是什么Array

例如,

让地图=新地图();
map.set( 'key1', '数据' );
map.set( 'key2', '更多数据' );
...
// 现在,希望有一个键数组
让 arr = //??// map.keys() //??//

我可以做一些蹩脚的事情,比如

函数 iter2array( iter ) {
  让 arr = new Array();
  for( 让 e in iter ) arr.push(e);
  返回 arr;
}

但必须有更好的方法。

javascript arrays iterator ecmascript-6

3
推荐指数
1
解决办法
1501
查看次数

链接映射减少过滤器时如何减少迭代?

我一直在阅读有关mapreduce的文章,filter因为它们在 React 和 FP 中的使用量很大。如果我们写这样的东西:

let myArr = [1,2,3,4,5,6,7,8,9]
let sumOfDoubleOfOddNumbers = myArr.filter(num => num % 2)
                                   .map(num => num * 2)
                                   .reduce((acc, currVal) => acc + currVal, 0);
Run Code Online (Sandbox Code Playgroud)

运行 3 个不同的循环。

我也读过有关 Java 8 流的内容,并且知道它们使用所谓的 monad,即首先存储计算。它们仅在一次迭代中执行一次。例如,

Stream.of("d2", "a2", "b1", "b3", "c")
    .map(s -> {
        System.out.println("map: " + s);
        return s.toUpperCase();
    })
    .filter(s -> {
        System.out.println("filter: " + s);
        return s.startsWith("A");
    })
    .forEach(s -> System.out.println("forEach: " + s));

// map:     d2
// filter:  D2 …
Run Code Online (Sandbox Code Playgroud)

javascript monads functional-programming

3
推荐指数
1
解决办法
1082
查看次数