lodash 计算数组元素之间的差异
lodash calculate difference between array elements
在javascript中使用lodash,我需要一种方法来计算数组元素之间的差异,例如:
具有数组
[0,4,3,9,10]
我需要得到每个元素之间的差异。
输出应该是
[4,-1,6,1]
我如何使用 lodash 执行此操作?
在 ruby 中看起来像这样:
ary.each_cons(2).map { |a,b| b-a }
一种可能的解决方案是使用 _.map():
var arr = [0,4,3,9,10];
var result = _.map(arr, function(e, i) {
return arr[i+1] - e;
});
result.pop();
document.write(JSON.stringify(result));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
如何使用_.reduce:
(function () {
var nums = [0,4,3,9,10];
var diffs = _.reduce(nums, function(result, value, index, collection) {
if (index === 0) return result;
result[index] = value - collection[index - 1];
return result;
}, []).slice(1);
$('.output').text(JSON.stringify(diffs));
}());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
<div class=output></div>
你可以做这样的事情:
var arr = [0, 4, 3, 9, 10];
var res = [];
_.reduce(_.rest(arr), function (prev, next) {
res.push(next - prev);
return next;
}, arr[0]);
也许是更惯用的 lodash 解决方案:
_.zipWith(arr.slice(1), arr.slice(0, -1), _.subtract)
在javascript中使用lodash,我需要一种方法来计算数组元素之间的差异,例如:
具有数组
[0,4,3,9,10]
我需要得到每个元素之间的差异。
输出应该是
[4,-1,6,1]
我如何使用 lodash 执行此操作?
在 ruby 中看起来像这样:
ary.each_cons(2).map { |a,b| b-a }
一种可能的解决方案是使用 _.map():
var arr = [0,4,3,9,10];
var result = _.map(arr, function(e, i) {
return arr[i+1] - e;
});
result.pop();
document.write(JSON.stringify(result));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
如何使用_.reduce:
(function () {
var nums = [0,4,3,9,10];
var diffs = _.reduce(nums, function(result, value, index, collection) {
if (index === 0) return result;
result[index] = value - collection[index - 1];
return result;
}, []).slice(1);
$('.output').text(JSON.stringify(diffs));
}());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
<div class=output></div>
你可以做这样的事情:
var arr = [0, 4, 3, 9, 10];
var res = [];
_.reduce(_.rest(arr), function (prev, next) {
res.push(next - prev);
return next;
}, arr[0]);
也许是更惯用的 lodash 解决方案:
_.zipWith(arr.slice(1), arr.slice(0, -1), _.subtract)