2014-09-23 2 views
0

Хорошо, это может быть просто для какой-то гений там, но я изо всех сил ...добавить элементы массива Javascript

Это для проекта, я работаю с помощью ползунка, я хочу массив слайдер может использовать для точек привязки/приращений ... Я, вероятно, собираюсь сделать это мысленно, но все это хорошая практика! Пожалуйста помоги.

var frootVals = [1,2,3,4,5]; 
var frootInc = []; 

    for (i=0; i<=frootVals.length; i++) { 
      if (i == 0){ 
      frootInc.push(frootVals[i]); 
      } 
      else{ 
      frootInc.push(frootInc[i-1] += frootVals[i]) 
      } 
     }; 

То, что я пытаюсь сделать, это создать новый массив, так что его значения являются итоговыми элементов массива в frootVals.

В результате я ищу бы это:

fruitInc = [1,3,6,10,15] 
+0

Изменить '+ =' на '+' и '<=' на '<'. Вы можете избежать неуклюжий инструкции 'if', инициализируя массив с помощью параметра« var frootInc = [frootVals [0]]; »и изменяя инициализацию переменной цикла до« i = 1 ». –

+0

Мне нравится, что вы там делали. Круто, спасибо человеку. – HenryDavidTHROW

ответ

0
var frootVals = [1,2,3,4,5] 
    , frootInc = []; 

// while i < length, <= will give us NaN for last iteration 
for (i = 0; i < frootVals.length; i++) { 
    if (i == 0) { 
     frootInc.push(frootVals[i]); 
    } else { 
     // rather than frootIne[ i-1 ] += , 
     // we will just add both integers and push the value 
     frootInc.push(frootInc[ i-1 ] + frootVals[ i ]) 
    } 
}; 

Существовали несколько вещей неправильно с вашим кодом проверьте комментарий в моем примере кода. Надеюсь, что это помогает,

0

Это будет делать:

var frootVals = [1,2,3,4,5]; 
var frootInc = []; 

for (i=0; i < frootVals.length; i++) { // inferior to the length of the array to avoid iterating 6 times 
    if (i == 0) { 
     frootInc.push(frootVals[i]); 
    } 
    else { 
     frootInc.push(frootInc[i-1] + frootVals[i]) // we add the value, we don't reassign values 
    } 
}; 

alert(JSON.stringify(frootInc)); 

jsfiddle здесь: http://jsfiddle.net/f01yceo4/

+0

Banging, спасибо за быстрый ответ mate :) ТАКЖЕ - как вы используете JSON.stringify - если вы только что сделали предупреждение (frootInc), не отобразили бы элементы правильно? потому что это то, что я использовал. – HenryDavidTHROW

+0

Это привычка. Я думаю, что можно использовать предупреждение. Вы также можете использовать console.log() и проверить его на консоли (с помощью инспектора вашего браузера). https://developer.chrome.com/devtools/docs/console –

0

изменить код на:

var frootVals = [1,2,3,4,5]; 
var frootInc = [frootvals[0]]; //array with first item of 'frootVals' array 

for (i=1; i<frootVals.length; i++) { 
    frootInc.push(frootInc[i-1] + frootVals[i]); //remove '=' 
} 
1

Для другого дубля, мне нравится функциональный подход:

var frootVals = [1,2,3,4,5]; 
var frootInc = []; 
var acc = 0; 
frootVals.forEach(function(i) { 
    acc = acc + i; 
    frootInc.push(acc); 
}); 
0

Вот очень простой чистый функциональный подход (без варов, сторона -effects, или затворы необходимо):

[1,2,3,4,5].map(function(a){return this[0]+=a;}, [0]); 
// == [1, 3, 6, 10, 15] 

если имя и не-сэндвич функция, вы можете использовать его и снова, в отличие от жестко закодированного имени var, имени свойства или for-loop ...

+0

это хорошо (и вы получаете мой +1), но я думаю, что использование этого объекта с более очевидным намерением лучше в качестве примера, например: 'var a = [1,2,3,4,5] .map (функция (a) {return this.acc + = a;}, {acc: 0});' – Segfault

+0

@Segfault: fair 'nuf .. . Важным моментом в моем ответе является сохранение функции чистой. – dandavis

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