JavaScript中如何根据条件获取多维数组的首个匹配值
解决数组filter报错并实现按条件匹配车辆名称的功能
问题场景
你的车辆数据多维数组如下:
[ ['Mini MINI ELECTRIC LEVEL 2',31000,31000], ['Peugeot 208 Allure Premium+ 1.2L PureTech 100 S&S',21590.00,21590.00], ['Renault CLIO Evolution TCe 90',18795,18795], ['Seat Ibiza SE 1.0 MPI 80PS',17755,17755], ['Skoda FABIA ESTATE SE Petrol 1.0 TSI 95 PS DSG',19685,19685], ['Toyota Yaris GR Sport Hybrid Petrol 1.5 VVT-i Auto',25340,25340], ['Vauxhall Corsa Design 1.2 (75PS)',18040.00,18040.00], ['Volkswagen Polo Life 1.0 95PS manual.',19795,19795] ]
尝试用filter方法匹配车辆名称时,控制台报错**"filter is not a function"**,你的测试代码如下:
for (i = 0; i < uniqueCarNames.length; i++) { const res = jsonCarsNewTable; console.log(res); for (j = 0; j < jsonCarsNewTable.length; j++) { console.log(jsonCarsNewTable[j]); console.log(jsonCarsNewTable[j][0]); } // var result = jsonCarsNewTable.filter(function(name) { // return name[0] == uniqueCarNames[i]; // }); console.log(uniqueCarNames); }
报错原因
filter是JS数组的专属方法,出现这个报错的核心原因是:jsonCarsNewTable不是合法的数组类型。常见触发场景包括:
- 变量存储的是未解析的JSON字符串,而非数组对象
- 变量被误赋值为null、undefined或普通对象等非数组类型
解决与实现方案
1. 先确保数组合法性
先添加类型校验,若原始数据是JSON字符串,先完成解析(注意JSON规范要求字符串用双引号,需替换原始数据中的单引号):
// 假设你的原始车辆数据是字符串格式 let rawCarData = "[['Mini MINI ELECTRIC LEVEL 2',31000,31000],...]"; // 替换单引号为双引号,再解析成数组 const jsonCarsNewTable = JSON.parse(rawCarData.replace(/'/g, '"')); // 验证数组合法性,控制台应输出true console.log(Array.isArray(jsonCarsNewTable));
2. 高效实现按条件匹配
无需嵌套循环,直接用find(匹配单个结果)或filter(匹配所有结果)方法完成逻辑:
// 示例待匹配名称数组 const uniqueCarNames = ['Mini MINI ELECTRIC LEVEL 2', 'Toyota Yaris GR Sport Hybrid Petrol 1.5 VVT-i Auto']; // 遍历待匹配名称,输出对应车辆信息 uniqueCarNames.forEach(targetName => { // 匹配第一个符合条件的车辆 const matchedCar = jsonCarsNewTable.find(car => car[0] === targetName); if (matchedCar) { console.log(`匹配成功:${matchedCar[0]},售价:${matchedCar[1]}`); } else { console.log(`未找到匹配车辆:${targetName}`); } });
3. 替换原有代码
将你之前的嵌套循环逻辑替换为上述代码,同时确保jsonCarsNewTable是合法数组即可解决报错并实现需求。
内容的提问来源于stack exchange,提问作者skhurams
相关产品推荐
相关产品推荐

