2015-08-19 53 views
1

http://jsfiddle.net/rw0z9e2j/循环并根据ID阵列内把阵列发生故障

var sports = [{ 
    "id": 1, 
     "name": "baseball" 
}, { 
    "id": 2, 
     "name": "Football" 
}]; 

var playersData = [{ 
    "sport_id": 2, 
     "id": "nv12", 
     "name": "James" 
}, { 
    "sport_id": 2, 
     "id": "nv11", 
     "name": "Jean" 
}]; 

var arr = [], 
    tempObj = {}; 

$.each(sports, function (i, obj) { 
    var sport_id = obj.id; 

    $.each(playersData, function (i, obj) { 
     if (sport_id == obj.sport_id) { 
      tempObj = { 
       "sport_id": obj.sport_id, 
        "id": obj.id, 
        "name": obj.name 
      }; 
      arr.push(tempObj); 
     } 

    }); 
    obj.players = arr; 
}); 

console.log(sports); 

我尝试建立玩家的数组,并根据sport_id但上述逻辑未能把他们中体育组。 它没有正确的组合,在sport_id = 1的球员应该去参加它的id = 1的运动,但为什么它没有?

上面的循环有什么问题吗?

+0

请发出想要的结果 –

+0

@NinaScholz在sport_id = 1的球员应该去体育其id = 1。 –

+1

you habe'obj'两次以及'i'。 –

回答

2

我想这是你想要什么:

var sports = [{ 
 
    "id": 1, 
 
    "name": "baseball" 
 
}, { 
 
    "id": 2, 
 
    "name": "Football" 
 
}]; 
 

 
var playersData = [{ 
 
    "sport_id": 2, 
 
    "id": "nv12", 
 
    "name": "James" 
 
}, { 
 
    "sport_id": 2, 
 
    "id": "nv11", 
 
    "name": "Jean" 
 
}]; 
 

 
sports.forEach(function (a) { 
 
    var arr = []; 
 
    playersData.forEach(function (b) { 
 
     if (a.id == b.sport_id) { 
 
      arr.push(b); 
 
     } 
 
    }); 
 
    a.players = arr; 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(sports, 0, 4) + '</pre>');

+0

我的问题队友在哪里? –

+0

'arr'永远不会被清除 –

+0

你可以看看Jai的答案,他不需要清除arr。 –

0

你必须把它推后:

arr.push(tempObj); 
obj.players = arr; 

其实你需要这样的:

var sports = [{ 
 
    "id": 1, 
 
     "name": "baseball" 
 
}, { 
 
    "id": 2, 
 
     "name": "Football" 
 
}]; 
 

 
var playersData = [{ 
 
    "sport_id": 2, 
 
     "id": "nv12", 
 
     "name": "James" 
 
}, { 
 
    "sport_id": 2, 
 
     "id": "nv11", 
 
     "name": "Jean" 
 
}]; 
 

 
var arr = []; 
 

 
$.each(sports, function (i, obj) { 
 
    $.each(playersData, function (i, player) { 
 
     if (obj.id === player.sport_id) { 
 
      var tempObj = { 
 
       "sport_id": player.sport_id, 
 
        "id": player.id, 
 
        "name": player.name 
 
      }; 
 
      arr.push(tempObj); 
 
      obj.players = arr; 
 
     } 
 

 
    }); 
 
    
 
}); 
 

 
console.log(sports);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

这不起作用,obj.players会参考playersData,因为它在$ .each循环中。 –

+0

我已经改变了参数名称的可读性,您可以看到第一个参数是'obj',第二个参数是'player'而不是'obj'。所以'obj.players'实际上是指第一个。 – Jai

+0

对不起,这实际上工作,它更干净。 –

0

希望你想把体育组里面,有你的播放器阵列里面添加,请注意,所以请致电

obj.sports = arr; 

希望它可以解决你的问题。