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

underscore or lazy.js map (0,1,2,3,4) + (1,2,3,4,5) ->(1,3,5,7,9)

本文关键字:js lazy 地图 线或      更新时间:2023-09-26

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

地图(0,1,2,3,4)+(1、2、3、4、5)->(1、3、5、7、9)

如何在lazy.js或下划线中实现?

谢谢!

您可以使用_.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));

使用下划线,@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 ]    

上面的示例可以通过以下方式使用下划线实现:

_.map([0, 1, 2, 3, 4], function(n, i) {
  return n + i + 1
}) // This returns [1, 3, 5, 7, 9]
下面是API文档的链接:下划线#map