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 12 那工作正常但是 getPlayersInfo(p) 首先 alertRonaldo 并且比我得到 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];