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

如何用JavaScript的.filter方法匹配二维数组首元素与一维数组对应项?

查找数组元素在另一个数组中的对应位置

我有两个数组:

第一个是二维数组:

var arr = [
  [1529539200,15.9099,16.15,15.888,16.0773,84805.7,1360522.8],
  [1529625600,16.0768,17.38,15.865,17.0727,3537945.2,58937516],
  [1529712000,17.0726,17.25,15.16,15.56,3363347.2,54172164]
];

第二个是一维数组:

var arr2 = [
  1647475200, 1647561600, 1647648000, 1647734400, 1647820800,
  1647907200, 1647993600, 1648080000, 1648166400, 1648252800
];

我需要实现的是:遍历arr中的每个子数组,取其第一个元素(即arr[i][0]),查找该元素在arr2中的位置索引。比如如果arr[100][0]的值存在于arr2中,我需要得到它在arr2里的索引。

我尝试用.filter()方法,但只得到了一个结果,而arr的长度是120,应该得到120个结果,恳请帮忙解决。


解决方案

方法1:直接遍历查找(小数据量适用)

使用Array.prototype.map()遍历arr的每个子数组,对每个子数组的第一个元素调用arr2.indexOf()获取索引,元素不存在时会返回-1。

// 遍历arr,收集每个子数组首元素在arr2中的索引
const result = arr.map(item => arr2.indexOf(item[0]));
console.log(result);

方法2:预存映射提升效率(大数据量适用)

如果arr和arr2数据量较大,每次调用indexOf()都会遍历arr2,效率较低。可以先把arr2的元素与索引存成Map,之后直接通过键值对查找,时间复杂度从O(n*m)降至O(n+m)。

// 构建arr2的元素-索引映射表
const valueIndexMap = new Map();
arr2.forEach((val, idx) => valueIndexMap.set(val, idx));

// 遍历arr获取结果,不存在则返回-1
const result = arr.map(item => valueIndexMap.get(item[0]) ?? -1);
console.log(result);

为什么你的.filter()方法无效?

.filter()的作用是筛选出符合条件的元素,而不是遍历每个元素并返回对应值。你需要的是遍历每个元素并输出对应结果,因此应该使用.map()方法,而非.filter()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:06:19