如何在给定JavaScript对象中打印包含指定数组的键名?
解决方法:找出包含指定子数组的对象键名
没问题,这事儿其实挺简单的,核心就是要准确判断每个键对应的数组里是否包含你指定的子数组。直接上可运行的代码和详细解释:
实现代码
const data = { sand: [['sun', 'moon', 'cool'], ['man', 'store', 'rose', 'big', 'you', 'sharp', 'low', 'high'], ['hot', 'cool', 'lip'], ['store', 'man', 'lip']], king: [['store', 'man', 'lip'], ['store', 'man', 'lip'], ['store', 'man', 'lip']], house: [['lip', 'store', 'hot', 'bed', 'you', 'low', 'run', 'high'], ['cool', 'sun', 'hot', 'big', 'sharp', 'low', 'run', 'high'], ['high', 'cool', 'moon', 'lip', 'man'], ['man', 'store', 'rose', 'big', 'you', 'sharp', 'low', 'high']], bow: [['lip', 'store', 'hot', 'bed', 'you', 'low', 'run', 'high'], ['bed', 'moon', 'lip'], ['low', 'cool', 'lip', 'man']], queen: [['cool', 'awe'], ['low', 'dad'], ['usa', 'cool', 'ita'], ['bed', 'glass', 'store', 'sal']], }; // 定义我们要找的目标子数组 const targetSubArr = ['store', 'man', 'lip']; const matchingKeys = []; // 遍历对象的所有键名 for (const key of Object.keys(data)) { // 检查当前键对应的数组中是否存在匹配的子数组 const hasMatchingSubArr = data[key].some(subArr => { // 注意:不能直接用 === 比较数组,得转成字符串或者逐元素对比 return JSON.stringify(subArr) === JSON.stringify(targetSubArr); }); if (hasMatchingSubArr) { matchingKeys.push(key); } } // 输出预期格式的结果 console.log(matchingKeys.join(', ')); // 输出: sand, king
关键细节解释
- 数组不能直接用
===比较:因为数组是引用类型,即使元素和顺序都一样,两个数组的引用也不同,所以得用JSON.stringify把数组转成字符串后对比,确保元素顺序和内容完全一致。 Array.some()方法:用来快速判断数组中是否至少有一个元素满足条件,只要找到一个匹配的子数组就会停止遍历,效率更高。- 结果格式化:最后用
Array.join(', ')把收集到的键名转成你需要的逗号分隔字符串。
更可靠的数组对比方案(可选)
如果担心JSON.stringify遇到特殊字符(比如包含undefined、函数或者循环引用)的边缘情况,可以自己写一个逐元素对比的函数:
function isArraysEqual(arr1, arr2) { if (arr1.length !== arr2.length) return false; for (let i = 0; i < arr1.length; i++) { if (arr1[i] !== arr2[i]) return false; } return true; } // 把上面的判断替换成这个函数即可 const hasMatchingSubArr = data[key].some(subArr => isArraysEqual(subArr, targetSubArr));
内容的提问来源于stack exchange,提问作者name
相关产品推荐
相关产品推荐

