【问题标题】:Enumerating specific properties of an object Javascript in a for loop [duplicate]在for循环中枚举对象Javascript的特定属性[重复]
【发布时间】:2016-07-12 23:58:26
【问题描述】:

我想显示组成球队的球员。 所以我创建了两个对象:一个给玩家,一个给团队。

    var equipes = [
            {'id_equipe' : 1 , 'id_joueur1' : 1 , 'id_joueur2' : 2 , 'id_joueur3' : 3, 'id_joueur4' : 4, 'id_joueur5' : 5, 'id_joueur6' : 6, 'id_poule' : 1, 'nbr_joueurs' : 1,'nbr_joueurs' : 6, 'nom' : "Dark vador", 'points' : 50},
            {'id_equipe' : 2 , 'id_joueur1' : 7 , 'id_joueur2' : 8 , 'id_joueur3' : 9, 'id_joueur4' : 10, 'id_joueur5' : 11, 'id_joueur6' : 12, 'id_poule' : 1, 'nbr_joueurs' : 6, 'nom' : "CEM", 'points' : 100},
            {'id_equipe' : 3 , 'id_joueur1' : 13 , 'id_joueur2' : 14 , 'id_joueur3' : 15, 'id_joueur4' : 16, 'id_joueur5' : 17, 'id_joueur6' : 18, 'id_poule' : 1, 'nbr_joueurs' : 6, 'nom' : "Test", 'points' : 25}
    ];

   // I stock with localstorage
   window.localStorage.setItem('equipes', JSON.stringify(equipes));

    var joueurs = [ 
        {'id_joueurs' : 1 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : true},
        {'id_joueurs' : 2 , 'prenom' : "Jasmine" , 'nom' : "Test" , 'capitaine' : true},
        {'id_joueurs' : 3 , 'prenom' : "Kevin" , 'nom' : "Test2" , 'capitaine' : false},
        {'id_joueurs' : 4 , 'prenom' : "Thierry" , 'nom' : "Blabla" , 'capitaine' : false},
        {'id_joueurs' : 5 , 'prenom' : "Olivier" , 'nom' : "Blablabla" , 'capitaine' : false},
        {'id_joueurs' : 6 , 'prenom' : "Loic" , 'nom' : "Bla" , 'capitaine' : false},
        {'id_joueurs' : 8 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false},
        {'id_joueurs' : 9 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false},
        {'id_joueurs' : 10 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false},
        {'id_joueurs' : 11 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false},
        {'id_joueurs' : 12 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false},
        {'id_joueurs' : 13 , 'prenom' : "Sam" , 'nom' : "Mignot" , 'capitaine' : false}

    ];
    // Same thing, I stock with localstorage
    window.localStorage.setItem('joueurs', JSON.stringify(joueurs));

现在我想知道每支球队的球员姓名(感谢'id_joueur1',id_joueur2',...)。所以我创建了这个函数:

function getJoueursEquipe () {

  var equipes = JSON.parse(window.localStorage.getItem("equipes")), // I recuperate the team's storage
      nbr_joueurs = equipes.nbr_joueurs, // how many player in the team, it can change
      joueurs = JSON.parse(window.localStorage.getItem("joueurs")), // I recuperate the player's storage
      joueursEquipe = null,
      id_joueur_equipe = null;

   // Here I want to recover id_joueur1, id_joueur2, id_joueur3 ... until nbr_joueurs
  for (var j = 1; j <= nbr_joueurs; j++) {
      id_joueur_equipe = "id_joueur"+j; 
      console.log(id_joueur_equipe);
      console.log(equipes.id_joueur_equipe1); //This is my problem
      // It returns "undefined 
  }

我想恢复这些元素:

  • equipes.id_joueur1
  • equipes.id_joueur2
  • equipes.id_joueur3

...

我尝试了不同的语法(如console.log(equipes.id_joueur+j)但没有成功!

我错过了什么?我的想法是错误的?有什么线索吗? 在此先感谢:)

【问题讨论】:

  • 为什么你的装备对象中没有 jueur_ids 属性?我认为这会更容易:)但是如果你想要这样你在最后犯了一个错误:console.log(equipes[id_joueur_equipe])
  • 是的,事实上它可能更容易^^一天结束,我没有明确的想法,但是使用 console.log(equipes[id_joueur_equipe]) ...它工作得很好!谢谢!
  • 事实上我认为它不应该工作......:p因为equipes是一个数组......所以你必须遍历这个数组的每个项目然后console.log(equipes [j] [id_joueur_equipe])。你在这里开始犯了一个错误:nbr_joueurs =equipes.nbr_joueurs 不应该工作。你必须循环装备
  • 或者只是在 getJoueursEquipe 函数中添加一个equipeId 参数。然后像这样构建一个 equipe 变量:var equipe = equipe[equipeId]。最后,您使用此变量,getJoueursEquipe 返回一个包含玩家 ID 的数组!但是是的 ^^ 你应该使用 joueur_ids 属性 ;)

标签: javascript arrays object properties local-storage


【解决方案1】:

我想恢复这些元素:

equipes.id_joueur1equipes.id_joueur2equipes.id_joueur3

希望这个 sn-p 有用

var equipes = [// Rest of the objects];
// get keys form the equipes object
var m = Object.keys(equipes[0]);
// Filter only the require keys
var _filteredValue = m.filter(function(item){
 return item !=="id_equipe" && item !== "id_poule" && 
 item !== "nbr_joueurs" && item !=="nom" && item !=="points"
})

// Will loop through each object of equipes
equipes.forEach(function(item){ 
 // Will loop through each filtered item
_filteredValue.forEach(function(itemFilter){
   document.write('<pre>'+itemFilter+' -- ' +_item[itemFilter]+'</pre>')
  })

})

JSFIDDLE

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2015-12-13
    • 2010-09-10
    • 2012-10-20
    • 2021-10-08
    相关资源
    最近更新 更多