2015-08-19 103 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; 

希望它可以解決你的問題。