J'essaie de montrer une boucle de tableau dans laquelle j'ai une date et sa valeur. Je suis capable de boucler les Objects.keys d'un tableau mais la boucle interne doit montrer le tableau de clés individuellement. C'est une tâche de tableaux simples mais je ne peux pas le comprendre. voici mon code.

var arr = {
    '2016-03-06' : ['1', '2','3','4','5'],          // 6th march 2016
    '2016-03-07' : ['6','7','8','9','10','11'],     // 7th march 2016
    '2016-03-08' : ['2','3','4','5'],           // 8th march 2016
    '2016-03-09' : ['6','7','8','9','10','11'],     // 9th march 2016
    '2016-03-10' : ['1', '2','3'],          // 10th march 2016
    '2016-03-11' : ['6','7','8','9','10','11'],     // 11th march 2016
};

var a=0;
var b=0;
ab = Object.keys(arr).length;
bc = Object.keys(arr)[b].length;
console.log(ab);
console.log(bc);

for(a=0; a < ab; a++){
    $('.result .array').append('<li data-date="'+Object.keys(arr)[a]+'">'+ Object.keys(arr)[a] + '</li>');
    for(b=0; b < Object.keys(arr).length; b++){
        $('.result .array').append('<li data-date='+ Object.keys(arr)[a]  +'>1</li>');
    }
}
0
John Paul 8 mars 2016 à 10:22

4 réponses

Meilleure réponse

Tout devient clair lorsque vous nommez des choses:

var arr = {
    '2016-03-06' : ['1', '2','3','4','5'],          // 6th march 2016
    '2016-03-07' : ['6','7','8','9','10','11'],     // 7th march 2016
    '2016-03-08' : ['2','3','4','5'],           // 8th march 2016
    '2016-03-09' : ['6','7','8','9','10','11'],     // 9th march 2016
    '2016-03-10' : ['1', '2','3'],          // 10th march 2016
    '2016-03-11' : ['6','7','8','9','10','11'],     // 11th march 2016
};

for (var date in arr) {
    console.log('there are %s hours in %s:', arr[date].length, date);
    for (var hour in arr[date]) {
        console.log('- %s', arr[date][hour])
    }
}

Où:

  • arr.length est la longueur entière de l'objet;
  • arr[date] est le tableau entier;
  • arr[date].length est la longueur du tableau;
  • date est l'étiquette de l'objet;
  • arr[date][hour] est une valeur de vos tableaux;
0
MrVaykadji 8 mars 2016 à 07:44

Je crois que vous recherchez une telle sortie:

var arr = {
    '2016-03-06' : ['1', '2','3','4','5'],          // 6th march 2016
    '2016-03-07' : ['6','7','8','9','10','11'],     // 7th march 2016
    '2016-03-08' : ['2','3','4','5'],           // 8th march 2016
    '2016-03-09' : ['6','7','8','9','10','11'],     // 9th march 2016
    '2016-03-10' : ['1', '2','3'],          // 10th march 2016
    '2016-03-11' : ['6','7','8','9','10','11'],     // 11th march 2016
};

for (var key in arr) {
    
  $('.result .array').append('<li data-date="'+key+'">'+ key + '</li>');

  var associatedData = arr[key];
  if($.isArray(associatedData)){
    for (var i = 0; i < associatedData.length; i++) {
      $('.result .array').append('<li data-date='+ associatedData[i]  +'>'+associatedData[i]+'</li>');
    }
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="result">
  <div class="array">
  </div>
</div>
2
vijayP 8 mars 2016 à 07:39
for(b=0; b < Object.keys(arr).length; b++){
        $('.result .array').append('<li data-date='+ Object.keys(arr)[a]  +'>1</li>');
    }

Ici, Object.keys(arr)[a], cela doit être Object.keys(arr)[b].

Vous utilisez l'incrément a deux fois au lieu de a et b une fois.

0
user3821538 8 mars 2016 à 07:35

Vous pouvez utiliser Array.forEach pour parcourir en boucle Keys ou currentItem.

De plus, comme je l'ai déjà mentionné, c'est une mauvaise pratique d'ajouter un élément dans une boucle. Vous devez plutôt créer une chaîne html et effectuer une opération en bloc.

var arr = {
    '2016-03-06' : ['1', '2','3','4','5'],          // 6th march 2016
    '2016-03-07' : ['6','7','8','9','10','11'],     // 7th march 2016
    '2016-03-08' : ['2','3','4','5'],               // 8th march 2016
    '2016-03-09' : ['6','7','8','9','10','11'],     // 9th march 2016
    '2016-03-10' : ['1', '2','3'],                  // 10th march 2016
    '2016-03-11' : ['6','7','8','9','10','11'],     // 11th march 2016
};
var html = "";

for (var k in arr){
  html+= '<li data-date="'+k+'">'+ k + '</li>';
  
  if(Array.isArray(arr[k])){
    arr[k].forEach(function(item){
      html += '<li data-date="'+item+'">'+ item + '</li>';
    });
  }
};

$('.result .array').append(html)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="result">
  <div class="array">
  </div>
</div>
0
Rajesh 8 mars 2016 à 08:05