2016-03-25 16 views
1

Dinamik bir dizim var ve dizide varsa anahtarın değerini 1 artırmaya çalışıyorum. Hata ayıklama anahtarına göre, anahtarı artırıyor ve ikinci bir anahtar/değer çifti oluşturuyor.javascript dizisi - verilen anahtarda artış değeri

benim bir kod parçacığı:

 for (var i = 0; i < choices.length; i++) { 
      console.log(choices[i]); 
      if (choices[i].YearTermId == 1) { 
       if (!lookup(firstChoice, choices[i].FirstChoiceOptionId)) { 
        firstChoice.push({ 
         key: choices[i].FirstChoiceOptionId, 
         value: 1 
        }); 
       } else { 
        firstChoice[choices[i].FirstChoiceOptionId] = firstChoice[choices[i].FirstChoiceOptionId] + 1; 
       } 

daha/else seni value anahtar gibi artmalıdır düşünüyorum

function lookup(arr, name) { 
     for(var i = 0, len = arr.length; i < len; i++) { 
      if(arr[ i ].key === name) 
       return true; 
     } 
     return false; 
    } 
+0

Nesne kullanmanız gereken bir dizi kullanıyorsunuz. –

cevap

2

Nesne kullanmanız gereken bir dizi kullanıyorsunuz. Bir nesne kullanırsanız olarak, kodunuz yazılabilir: Tersine

var firstChoiceArray = Object.keys(firstChoice).map(function(key) { 
    return { 
     key: key, 
     value: firstChoice[key] 
    }; 
}); 

, bir giriş dizisi varsa ve:

var firstChoice = {}; 

for (var i = 0; i < choices.length; i++) { 
    var firstChoiceOptionId = choices[i].FirstChoiceOptionId; 

    if (choices[i].YearTermId == 1) { 
     firstChoice[firstChoiceOptionId] = firstChoice[firstChoiceOptionId] 
       ? firstChoice[firstChoiceOptionId] + 1 
       : 1; 

     /* ... */ 
    } 
} 

sonradan bir dizi olarak veri gerekiyorsa, sadece harita manipülasyon için bir nesneye dönüştürmek, azaltmak için:

var firstChoice = firstChoiceArray.reduce(function(result, current) { 
    result[current.key] = current.value; 

    return result; 
}, {}); 
+0

Bir dizi anahtar/değer olarak tutmaya çalışıyorum, böylece – arthur

+0

'dan sonra verileri chart.js'ye bağlayabiliyorum. İşlemi tamamladıktan sonra bir diziye eşleyin. Cevabımı güncelleyeceğim. –

+0

Nesne yolu mükemmel çalıştı, teşekkürler! – arthur

1

.. eğer:

firstChoice[choices[i].FirstChoiceOptionId].value ++; 

Ve isterim Bu kodu aşağıdaki gibi yeniden yazmak istiyorum:

ile
var firstChoice = {}; 
for (var i = 0; i < choices.length; i++) { 
    if (choices[i].YearTermId == 1) { 
     if (!firstChoice[choices[i].FirstChoiceOptionId]) { 
      firstChoice[choices[i].FirstChoiceOptionId] = 0; 
     } 
     firstChoice[choices[i].FirstChoiceOptionId]++; 
    } 
} 
console.log(firstChoice); 
+0

Değeri 1'de başlatmak istiyorum - diziyi sonradan chart.js'ye takmaya çalışıyorum. İlk snippet'i kullandığımda, .value, undefined öğesinin 'değerini' okuyamaz. – arthur

0

Dene: Örnek:

var a = [{key:"ab","value":1},{key:"cd","value":1},{key:"ef","value":1}]; 
a.map(function(item){if(item.key == this){item.value++}}, "cd"); 

Dolayısıyla, [1] bundan sonra 2 değerine sahip olur.

İlgili konular