JavaScript中如何关联数组匹配并返回对应变量值?代码调试求助
解决三组数据匹配并返回对应变量值的问题
我来帮你搞定这个问题!你现在遇到的核心问题是:platformIcon数组里存的是变量a、b、c、d的实际值(比如'ps'、'xbox'),而不是变量名本身,所以用slug1.has(x)去匹配肯定找不到——毕竟slug1里是'a'、'b'这种变量名,和'ps'完全不搭边。
解决方案:建立变量名与值的映射关系
最直接的办法是用一个对象来存储变量名和对应值的映射,这样就能通过匹配到的变量名快速取出对应的平台值。
修改后的完整代码
// 定义平台变量 var a = 'ps'; var b = 'xbox'; var c = 'nintendo'; var d = 'dindendo'; // 创建变量名到对应值的映射对象(ES6简写语法,键名和变量名一致时可以省略值的重复书写) const platformMap = { a, b, c, d }; var platform = ['a', 'b', 'c', 'd']; var slug = ['a', 'b']; var slug1 = new Set(slug); // 第一步:获取匹配的变量名数组 var difference = [...new Set(platform.filter(x => slug1.has(x)))]; console.log('匹配的变量名:', difference); // 输出: ['a', 'b'] // 第二步:通过映射对象取出对应的值 var differenceIcon = difference.map(key => platformMap[key]); console.log('匹配的平台值:', differenceIcon); // 输出: ['ps', 'xbox']
为什么之前的代码无效?
你之前写的var differenceIcon = [...new Set(platformIcon.filter(x => slug1.has(x)))];是在检查platformIcon里的元素(比如'ps'、'xbox')是否存在于slug1(集合里是'a'、'b')中,显然两者完全不匹配,所以返回的是空数组,这就是你得不到预期结果的原因。
优化写法(一步到位)
如果不需要单独保留difference变量,还可以把两步合并,让代码更简洁:
var differenceIcon = platform .filter(x => slug1.has(x)) .map(key => platformMap[key]); console.log(differenceIcon); // 同样输出: ['ps', 'xbox']
这种用对象映射的方式不仅逻辑清晰,而且查找效率更高,尤其是当你的平台数据量变大时,优势会更明显。
内容的提问来源于stack exchange,提问作者user14868233
相关产品推荐
相关产品推荐

