下划线或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)
我想将一个序列映射到另一个序列,例如
地图(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
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- Backbone.js与jQuery的Lazy加载插件
- 下划线或lazy.js地图(0,1,2,3,4)+(1、2、3、4、5)→(1、3、5、7、9)
- 基于Lazy.js的fibonacci映射Bacon.js区间
- Lazy concat in Immutable.js?