2015-05-22 3 views
6

У меня есть следующий массивнайти различие между последовательными номерами в массиве в JavaScript

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

и если я хочу, чтобы вычислить разницу между последовательными числами в массиве. Я мог бы сделать это в Matlab с помощью встроенной функции (diff)

B=diff(A) возвращает

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

Я хотел бы знать, есть ли аналогичная встроенная функция в JavaScript?

ответ

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/

+1

Благодаря j08691, это работает. Я думал, что может быть встроенный метод, тогда я не должен изобретать велосипед. – mystackoverflow

1
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] 
+1

Как это принципиально отличается от моего ответа? Похоже на ту же логику. – j08691

6

Если вы предпочитаете функциональное программирование, вот решение, использующее map:

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

Немного информации: slice(1) получает все, кроме первого элемента. map возвращает новое значение для каждого из них, а возвращаемое значение - это разность между элементом и соответствующим элементом в A (массив un-slice d), поэтому A[i] является элементом до [i] в срезе.

Вот jsfiddle: https://jsfiddle.net/ewbmrjyr/2/

+0

Большое спасибо Roy, это хорошее решение. – mystackoverflow

Смежные вопросы