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

如何在jQuery中处理数组内嵌套对象中的数组?附示例数据

嘿,我来帮你梳理下怎么用jQuery(其实很多时候原生JS也够用,但既然你问jQuery我就结合着来)处理这种嵌套结构的数据~

处理嵌套数组对象的常见操作(jQuery + 原生JS结合)

你的数据源结构很清晰,每个玩家对象里包含name、cars数组和cars_total字段,我们可以结合jQuery的遍历方法和原生JS的数组方法来完成各种操作。

1. 遍历所有玩家及其车辆

如果想要把每个玩家的信息和他们的车辆列表展示出来,用jQuery的$.each()就很方便:

let source = [{ name: "Player1", cars:[{id: 20, count: 11}, {id: 23, count: 6}, {id: 2, count: 5}], cars_total: 22 }, { name: "Player2", cars:[{id: 11, count: 5}, {id: 24, count: 5}, {id: 42, count: 4}], cars_total: 14 }];

// 遍历每个玩家
$.each(source, function(playerIndex, player) {
  console.log(`玩家:${player.name},总车辆数:${player.cars_total}`);
  
  // 遍历当前玩家的每辆车
  $.each(player.cars, function(carIndex, car) {
    console.log(`--- 车辆ID:${car.id},数量:${car.count}`);
  });
});

这里$.each()的第一个参数是要遍历的集合,第二个回调函数里的参数分别是索引和当前元素,完全适配这种嵌套结构的遍历需求。

2. 查找特定玩家的特定车辆

比如你想找Player1中ID为23的车辆,可以结合原生JS的find()方法,比jQuery的方法更直观:

// 先找到Player1
const targetPlayer = source.find(player => player.name === "Player1");
if (targetPlayer) {
  // 再找他的车辆中ID为23的
  const targetCar = targetPlayer.cars.find(car => car.id === 23);
  if (targetCar) {
    console.log(`找到目标车辆:ID=${targetCar.id},数量=${targetCar.count}`);
  } else {
    console.log("该玩家没有这辆车");
  }
}

如果你更习惯用jQuery的写法,也可以用$.grep():

const targetPlayer = $.grep(source, function(player) {
  return player.name === "Player1";
})[0];

3. 修改车辆数量并更新总数

比如要把Player2中ID为42的车辆数量改成8,同时更新他的总车辆数:

$.each(source, function(_, player) {
  if (player.name === "Player2") {
    $.each(player.cars, function(_, car) {
      if (car.id === 42) {
        car.count = 8;
        // 用reduce重新计算总车辆数,确保数据一致
        player.cars_total = player.cars.reduce((sum, car) => sum + car.count, 0);
      }
    });
  }
});

console.log(source); // 此时Player2的cars_total会变成5+5+8=18

4. 给玩家添加新车辆(含重复ID判断)

比如给Player1添加一辆ID为100、数量为3的车,严谨一点的话要先检查是否已有该ID的车,避免重复:

$.each(source, function(_, player) {
  if (player.name === "Player1") {
    const existingCar = player.cars.find(car => car.id === 100);
    if (existingCar) {
      // 已有该车就累加数量
      existingCar.count += 3;
    } else {
      // 没有就新增
      player.cars.push({id: 100, count: 3});
    }
    // 重新计算总车辆数
    player.cars_total = player.cars.reduce((sum, car) => sum + car.count, 0);
  }
});

其实很多时候原生JS的数组方法(forEach、find、filter、reduce)已经足够好用,jQuery的$.each()更多是提供了兼容旧浏览器的遍历方式,你可以根据自己的需求混合使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:30:23