【问题标题】:lodash calculate difference between array elementslodash计算数组元素之间的差异
【发布时间】:2015-06-28 00:24:50
【问题描述】:

在使用lodash的javascript中,我需要一种方法来计算数组元素之间的差异,例如:

有一个数组
[0,4,3,9,10]
我需要了解每个元素之间的差异。
输出应该是
[4,-1,6,1]

我将如何使用 lodash 做到这一点?

在 ruby​​ 中,它看起来像这样:
ary.each_cons(2).map { |a,b| b-a }

【问题讨论】:

    标签: javascript node.js underscore.js lodash


    【解决方案1】:

    一种可能的解决方案是使用 _.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>

    【讨论】:

      【解决方案2】:

      你可以这样做:

      var arr = [0, 4, 3, 9, 10];
      var res = [];
      _.reduce(_.rest(arr), function (prev, next) {
        res.push(next - prev);
        return next;
      }, arr[0]);
      

      【讨论】:

        【解决方案3】:

        也许是更惯用的 lodash 解决方案:

        _.zipWith(arr.slice(1), arr.slice(0, -1), _.subtract)
        

        【讨论】:

          【解决方案4】:

          _.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>

          【讨论】: