2010-09-21 3 views
0

Как разобрать через массив и для каждого элемента умножить его значение для поля на «х»Javascript массив, Разбираем каждый элемент умножить каждый элемент на «х»

Я хочу, чтобы пройти через аа родного массива, содержит 60 элементов следующим образом:

[ 
    [value, key], [value, key], [value, key] 
] 

в приведенном выше примере ключевое поле будет число, начиная с 60 и обратный отсчет до 0.

поле значение может быть любое число.

Этот массив построен вживую, начиная с момента, когда он передается это первое значение, вмещающий до максимум 60 значений элементов, с помощью ключа для каждого значения, начиная с 60

Каждый seccond передается новое значение к массиву и самое старое значение. 0 удаляется 60, а все остальное сбрасывается на 1.

Когда это обновление происходит с добавлением нового значения в массив, я также хочу проанализировать весь массив и умножить поле «значение» на 'Икс'. Позволяет, например, указать, что x равно 1,2.

Это означает, что каждый раз, когда выполняется обновление, первое значение умножается на 1,2, значение второго элемента умножается на 1,2, а третьи элементы умножаются на 1,2 и так далее.

Это означает, что к тому моменту, когда он достигнет «ключа» 0, являющегося последним элементом, он будет умножен на 1,2 60 раз.

Пример фактических данных:

[[-30.4901691201296, 60], [-30.1833776214304, 59], [-29.7627840450973, 58], [-29.3947583209356, 57], [-28.9645892754055, 56], [-28.6354656536817, 55], [-28.2921821871286, 54], [-27.9905577131509, 53], [-27.7947946913668, 52], [-27.6543340290543, 51], [-27.6519828946371, 50], [-27.6173533427694, 49], [-27.5554196324518, 48], [-27.4347081962877, 47], [-27.3527616238956, 46], [-27.1500146810747, 45], [-26.9074687550566, 44], [-26.5520557024907, 43], [-26.3778269233317, 42], [-26.2025741177589, 41], [-25.9715337718657, 40], [-25.7909728444171, 39], [-25.6446160165696, 38], [-25.7040560541356, 37], [-25.8676731838619, 36], [-26.1857049460322, 35], [-26.5338463742982, 34], [-26.8991378853451, 33], [-27.0722352574209, 32], [-26.9933000067798, 31], [-26.5736545189266, 30], [-25.5369071865736, 29], [-24.0243166908922, 28], [-22.2063720253207, 27], [-20.4275559328569, 26], [-19.0900734751772, 25], [-17.9226541769101, 24], [-17.2615147887497, 23], [-16.8724851836878, 22], [-16.7577128443888, 21], [-17.1571347530026, 20], [-17.6471873975822, 19], [-18.6461197175468, 18], [-19.8885692353328, 17], [-21.2039894571651, 16], [-23.0079052401369, 15], [-25.1005655769037, 14], [-27.342591130044, 13], [-29.7388646710222, 12], [-32.1429579450835, 11], [-34.5906266190624, 10], [-37.0391503781189, 9], [-39.5315634976835, 8], [-41.9487262455882, 7], [-43.9289096382579, 6], [-46.00519229484, 5], [-48.6400387646249, 4], [-50.5736255352748, 3], [-52.8788720227602, 2], [-54.786535213712, 1]] 

Текущий код:

Это мое текущее использование для создания массива:

setInterval(ExampleUsage, 1000); 

function ExampleUsage() { 
    $.getJSON(urlDefault, function (data) { 
      RawDnD = data.DnD* 1; 
      DnDData.unshift(RawDnD); 
      DnDData = DnDData.slice(0, 60); 
      DnDArray = $.map(DnDData, function (n, i) { 
       return [[n, 60 - i]]; 
      }); 
      // Parse array here // 
    }); 
} 
+0

ли механизмы имеют значение? Я имею в виду, это разрешено? '[[-30.4901691201296, 0], [-30.1833776214304, 7], [-29.7627840450973, 58], ...', если массив содержит все 60? – Reigel

+0

Устройства не имеют значения. Но он сортируется по умолчанию от 60 до 0. – Sphvn

+1

Underscore.js предоставляет эту функцию вместе с другими - см .: http://documentcloud.github.com/underscore/#map –

ответ

1

Я не думаю, что вы может делать то, что вы просите. Если вы правильно читаете свой код, каждую секунду вы восстанавливаете массив из данных JSON. Тривиально прокручивать массив после этого и умножать каждый элемент, но через секунду вы перейдете к массиву с новыми данными и потеряете эти кратные.

Вы могли бы имитировать эффект, делая это:

var factor = 1.2; 
var multiplier = factor; 
for (i = 0; i < dataArray.length; i++) { 
    dataArray[i] *= multiplier; 
    multiplier *= factor; 
} 

Не уверен, если это то, что вы хотите, хотя.

+0

Вы правы в перестройке массива, и это работает отлично. Приятно и просто. – Sphvn

1

вы могли бы начать с этой идеей

​$.each(arrayVariable ,function(i,v){ 
    console.log(v[0] + ' ---- ' + v[1] + '\n'); 
    // v[0] is the value 
    // v[1] is the key 
});​ 

тогда вы могли бы сделать что-то подобное,

​$.each(arrayVariable ,function(i,v){ 
    v[1] -= 1; // decrease all keys by 1 
    v[0] *= factor; // factor = 1.2; 
    if (v[1] == -1) { // if key was 0 before, then 0-1 is -1 
     v[1] = 60; // replace it with 60, the new one... 
     v[0] = newData * factor; // new data inserted, multiplied by the factor. 
    } 
});​ 

выглядит так,

setInterval(ExampleUsage, 1000); 

function ExampleUsage() { 
    $.getJSON(urlDefault, function (data) { 
     RawDnD = data.DnD * 1;​ 
     // DnDData, is assumed to to have all values already 
     $.each(DnDData, function (i, v) { 
      v[1] -= 1; // decrease all keys by 1 
      v[0] *= factor; // factor = 1.2; 
      if (v[1] == -1) { // if key was 0 before, then 0-1 is -1 
       v[1] = 60; // replace it with 60, the new one... 
       v[0] = RawDnD * factor; // new data inserted, multiplied by the factor. 
      } 
     });​ 
    }); 
} 

simple demo

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