You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效提取JSON对象中所有玩家名称至数组?

提取并合并服务器数组中的所有玩家名称

嘿,我来给你分享几个高效的办法,从你的server数组里提取并合并所有玩家列表:

方法1:用flatMap(ES2019+ 推荐)

这是最简洁高效的方案,flatMap会先遍历每个服务器对象取出players数组,再自动帮你把嵌套的数组扁平化一层,一步到位:

const server = [{ name: 'xVg1', players: ['foo', 'bar','player1'], status: "on", origin:"", }, { name: 'xVg2', players: ['foo1', 'bar1','player2'], status: "off", origin:"", }, { name: 'xVg3', players: ['foo2', 'bar2','player3'], status: "on", origin:"" }];

const allPlayers = server.flatMap(serverItem => serverItem.players);
console.log(allPlayers);
// 输出结果: ['foo', 'bar','player1','foo1', 'bar1','player2','foo2', 'bar2','player3']

优势:代码简洁语义化,只需要一次遍历就完成映射+扁平化,性能拉满。

方法2:reduce结合concat(兼容旧环境)

如果你的项目需要支持ES2019之前的JavaScript环境,这个经典组合就很靠谱:

const allPlayers = server.reduce((totalPlayers, currentServer) => {
  return totalPlayers.concat(currentServer.players);
}, []);
console.log(allPlayers);

优势:兼容性拉满,逻辑清晰,哪怕是新手也能一眼看懂。

方法3:展开运算符+reduce(写法直观)

用ES6的展开运算符来合并数组,写法更直观,适合小数据量场景:

const allPlayers = server.reduce((totalPlayers, currentServer) => {
  return [...totalPlayers, ...currentServer.players];
}, []);
console.log(allPlayers);

注意:这种写法每次合并都会创建新数组,数据量大的时候性能会比concat稍差一点,小数据量可以忽略。

额外提示

如果你的server数组里可能存在players字段为空或者不是数组的情况,可以加个兜底判断,避免报错:

const allPlayers = server.flatMap(serverItem => serverItem.players || []);

内容的提问来源于stack exchange,提问作者Reactive lance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:16:42