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

JavaScript从JSON数组取值时如何保持指定索引数组的顺序

问题现象

当输入索引数组为 var idx = [4, 6, 5] 时,现有代码运行输出结果如下:

i: 0 id: 4 rating: 999
i: 2 id: 5 rating: 333
i: 1 id: 6 rating: 666

期望得到的正确输出结果如下:

i: 0 id: 4 rating: 999
i: 1 id: 6 rating: 666
i: 2 id: 5 rating: 333
问题根因

现有实现外层遍历data数组,内层循环匹配idx中的对应id,输出顺序完全跟随data数组的固有元素顺序,和idx数组指定的排列顺序不匹配。

现有错误实现代码:

var data = [{
    "id": 1,
    "rating": 55
  },
  {
    "id": 2,
    "rating": 22
  },
  {
    "id": 3,
    "rating": 111
  },
  {
    "id": 4,
    "rating": 999
  },
  {
    "id": 5,
    "rating": 333
  },
  {
    "id": 6,
    "rating": 666
  }
];

var idx = [4, 6, 5];

$.each(data, function() {
  for (var i = 0; i < idx.length; ++i) {
    if (idx[i] == this.id) {
      console.log('i: ' + i + ' id: ' + this.id + ' rating: ' + this.rating);
    }
  }
});
修复方案

调整遍历逻辑,把遍历顺序反过来:外层遍历idx数组保证输出顺序和idx完全一致,内层从data中查找id匹配的对应条目即可。
修复后代码:

var data = [{
    "id": 1,
    "rating": 55
  },
  {
    "id": 2,
    "rating": 22
  },
  {
    "id": 3,
    "rating": 111
  },
  {
    "id": 4,
    "rating": 999
  },
  {
    "id": 5,
    "rating": 333
  },
  {
    "id": 6,
    "rating": 666
  }
];

var idx = [4, 6, 5];

$.each(idx, function(index, targetId) {
  // 查找data中id匹配的项
  var targetItem = data.find(function(item) {
    return item.id === targetId;
  });
  if (targetItem) {
    console.log('i: ' + index + ' id: ' + targetItem.id + ' rating: ' + targetItem.rating);
  }
});

运行上述代码即可得到和预期完全一致的输出。如果需要兼容不支持Array.prototype.find的老旧环境,可以把查找匹配项的逻辑替换为普通for循环实现,核心遍历顺序不需要改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:15:37