return 的 For 循环不会退出
For Loop with return won't exit
我有两个数组:
匹配
var matches = [
{ playerId: 1, matchId: 1 },
{ playerId: 2, matchId: 1 },
{ playerId: 3, matchId: 2 }];
玩家
var players= [
{ name: "Ronaldo", id: 1 },
{ name: "Messi", id: 2 },
{ name: "Zlatan" id: 3 }];
我想列出所有与 matchId 1
;
比赛的球员
for (i = 0; i < matches.length; i++) {
if (matches[i].matchId == 1)
{
var p = matches[i].playerId;
//alert(p);
var currentName = getPlayersInfo(p);
alert(currentName);
}
}
function getPlayersInfo(id){
var curID = id;
var name;
for (i = 0; i < players.length; i++) {
if (players[i].id == curID) {
name = players[i].name;
}
}
return name;
}
如果我只有 alert(p);
而不是我调用 getPlayersInfo(p)
比我得到 alert
两次 ID 1
和 2
那工作正常但是 getPlayersInfo(p)
首先 alert
是 Ronaldo
并且比我得到 alert
Messi
倍。
我在 getPlayersInfo()
中做错了什么?
您正在覆盖相同的 i
变量(它是全局变量),因为您没有使用 var
声明它。在你的 for
循环中,使用
for (var i = 0; ...
另一个解决方案是
for (var i = 0, l = matches.length; i < l; i++) {
var match = matches[i];
if (match.matchId === 1) {
var name = players.find(function(player) {
return player.id === match.playerId;
});
alert(name); // note, could be "undefined"
}
}
如果您必须定期通过 ID 查找玩家,请考虑创建地图(为简洁起见,使用 ES2015 语法)
let playersById = players.reduce((map, player) => {
map[player.id] = player;
return map;
}, Object.create(null));
那你可以简单参考一下
playersById[match.playerId];
我有两个数组:
匹配
var matches = [
{ playerId: 1, matchId: 1 },
{ playerId: 2, matchId: 1 },
{ playerId: 3, matchId: 2 }];
玩家
var players= [
{ name: "Ronaldo", id: 1 },
{ name: "Messi", id: 2 },
{ name: "Zlatan" id: 3 }];
我想列出所有与 matchId 1
;
for (i = 0; i < matches.length; i++) {
if (matches[i].matchId == 1)
{
var p = matches[i].playerId;
//alert(p);
var currentName = getPlayersInfo(p);
alert(currentName);
}
}
function getPlayersInfo(id){
var curID = id;
var name;
for (i = 0; i < players.length; i++) {
if (players[i].id == curID) {
name = players[i].name;
}
}
return name;
}
如果我只有 alert(p);
而不是我调用 getPlayersInfo(p)
比我得到 alert
两次 ID 1
和 2
那工作正常但是 getPlayersInfo(p)
首先 alert
是 Ronaldo
并且比我得到 alert
Messi
倍。
我在 getPlayersInfo()
中做错了什么?
您正在覆盖相同的 i
变量(它是全局变量),因为您没有使用 var
声明它。在你的 for
循环中,使用
for (var i = 0; ...
另一个解决方案是
for (var i = 0, l = matches.length; i < l; i++) {
var match = matches[i];
if (match.matchId === 1) {
var name = players.find(function(player) {
return player.id === match.playerId;
});
alert(name); // note, could be "undefined"
}
}
如果您必须定期通过 ID 查找玩家,请考虑创建地图(为简洁起见,使用 ES2015 语法)
let playersById = players.reduce((map, player) => {
map[player.id] = player;
return map;
}, Object.create(null));
那你可以简单参考一下
playersById[match.playerId];