【问题标题】:Finding difference between consecutive numbers in an array in javascript在javascript中查找数组中连续数字之间的差异
【发布时间】:2018-08-02 00:21:13
【问题描述】:

我有以下数组

A=[1,2,3,3,0] 

如果我想计算数组中连续数字之间的差异。我可以在 Matlab 中使用内置函数 (diff)

B=diff(A) 返回

B = [1,1,0,-3]

我想知道javascript中有没有类似的内置函数?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果你更喜欢函数式编程,这里有一个使用map的解决方案:

    function diff(A) {
      return A.slice(1).map(function(n, i) { return n - A[i]; });
    }
    

    一点解释:slice(1) 获取除第一个元素之外的所有元素。 map 为其中的每一个返回一个新值,返回的值是该元素与 A 中对应元素的差值,(un-sliced 数组),所以A[i] 是@987654329 之前的元素@ 在切片中。

    这里是 jsfiddle:https://jsfiddle.net/ewbmrjyr/2/

    【讨论】:

    • 代码可以使用Arrow functions进一步简化。
    • const diff = (A) => { return A.slice(1).map( (item,index) => { return item - A[index] } )}
    【解决方案2】:

    没有这样的内置函数,但是写一个很简单:

    function diff(ary) {
        var newA = [];
        for (var i = 1; i < ary.length; i++)  newA.push(ary[i] - ary[i - 1])
        return newA;
    }
    var A = [1, 2, 3, 3, 0];
    console.log(diff(A)) // [1, 1, 0, -3]
    

    这里是小提琴:https://jsfiddle.net/ewbmrjyr/1/

    【讨论】:

    • 感谢 j08691,它有效。我原以为可能有一个内置的方法,那么我不应该重新发明轮子。
    【解决方案3】:

    代码可以通过使用Array methodsArrow functions来简化:

    var visitsArr = [38,29,18,29,28,18,24];
    
    var diffs = visitsArr.slice(1).map((x,i)=> x-visitsArr[i]);
    
    diffs.forEach((x,i) => console.log(
       `Visits from day ${i+1} to day ${i+2} increased by ${x}`
    ));

    有关详细信息,请参阅

    【讨论】:

      【解决方案4】:
      var a = [1,2,3,3,0] ;
      function diff (arr){
          diffArr=[];
          for(var i=0; i<arr.length-1; i++){
              diffArr.push(arr[i+1]-arr[i]);
      
          }
          return diffArr;
      }
      alert(diff(a)); //[1,1,0,-3]
      

      【讨论】:

      • 这与我的回答有何根本不同?似乎是相同的逻辑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 2018-08-05
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多