JavaScript判断两个对象所有对应键值数组长度是否相等
问题解决思路
你的代码存在两个核心问题,直接导致报错和不符合预期的结果:
1. Object.entries 参数解构错误
Object.entries() 返回的是形如 [key, value] 的二维数组,你写的 (k, v) 里,第一个参数 k 是整个 [key, value] 数组,第二个参数 v 是当前项的索引,这就导致用 mapTwo[k] 时,k 是数组而非字符串key,自然会报错。正确写法是用数组解构获取key和对应数组:([key, arr])。
2. 误用 map 方法
map() 会返回一个新数组,而你需要的是所有对应数组长度都相等的单个布尔值,应该用 every() 方法——它会遍历数组,只有当所有回调返回true时,才会返回true,否则返回false。
修正后的基础代码
const mapOne = {idOne: ['a', 'b'], idTwo: ['c', 'd', 'e']}; const mapTwo = {idOne: [1, 2], idTwo: [3, 4, 5]}; // 假设两个对象的key完全一致时的写法 const result = Object.entries(mapOne).every(([key, arr]) => { return arr.length === mapTwo[key].length; }); console.log(result); // 输出 true
进阶:严格校验key完全一致
如果需要确保两个对象的key无遗漏、无额外项,可以先校验key的匹配度:
const keysOne = Object.keys(mapOne); const keysTwo = Object.keys(mapTwo); const result = keysOne.length === keysTwo.length && keysOne.every(key => keysTwo.includes(key)) && Object.entries(mapOne).every(([key, arr]) => arr.length === mapTwo[key].length); console.log(result);
内容的提问来源于stack exchange,提问作者Osman Mamun
相关产品推荐
相关产品推荐

