下划线或lazy.js地图(0,1,2,3,4)+(1,2,3,4,5) - >(1,3,5,7,9)

时间:2014-06-28 05:17:19

标签: javascript node.js functional-programming underscore.js lazy-evaluation

我想将序列映射到另一个序列,例如

map(0,1,2,3,4)+(1,2,3,4,5) - > (1,3,5,7,9)

如何在lazy.jsunderscore中执行此操作?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用_.zip_.map,就像这样

var _ = require("underscore");

function sum(numbers) {
    var result = 0;
    for (var i = 0; i < numbers.length; i += 1) {
        result += numbers[i];
    }
    return result;
}

console.log(_.map(_.zip([0, 1, 2, 3, 4], [1, 2, 3, 4, 5]), sum))
// [ 1, 3, 5, 7, 9 ]

由于只有两个数字,所以你可以像这样简化

var result = _.chain([0, 1, 2, 3, 4])
    .zip([1, 2, 3, 4, 5])
    .map(function(numbers) {
        return numbers[0] + numbers[1];
    })
    .value();

console.log(result);

你可以使它更加通用和干净,就像这样

function sum(numbers) {
    return numbers.reduce(function(result, current) {
        return result + current;
    }, 0);
}

var result = _.chain([0, 1, 2, 3, 4])
    .zip([1, 2, 3, 4, 5])
    .map(sum)
    .value();

甚至更简单,就像在第一个答案中一样

console.log(_.map(_.zip([0, 1, 2, 3, 4], [1, 2, 3, 4, 5]), sum));

答案 1 :(得分:0)

上述示例可以使用下划线以下列方式实现:

_.map([0, 1, 2, 3, 4], function(n, i) {
  return n + i + 1
}) // This returns [1, 3, 5, 7, 9]

以下是API文档的链接:Underscore#map

答案 2 :(得分:0)

使用下划线,@ thefortheye的解决方案效果很好,这里只是使用lazy.js的类似解决方案;

> var Lazy = require('lazy.js');

> var addParts = function(x) { return Lazy(x).sum(); }

> Lazy([0,1,2,3,4]).zip([1,2,3,4,5]).map(addParts).toArray()

[ 1, 3, 5, 7, 9 ]