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

为何getElementsThatEqual10AtProperty函数else分支无效?求技术指导

问题分析与调试方向

我来帮你拆解代码里的问题,看看为什么你的else分支没正常工作,以及其他需要调整的地方:

核心问题:else分支永远不会执行

你写的判断条件是:

if (typeof Array.isArray(obj[key])) {

Array.isArray()本身就会返回一个布尔值(true或false),而typeof true的结果是"boolean",所以这个条件其实等价于if ("boolean")——这永远是true!所以else分支根本没有机会触发,这就是它不工作的关键原因。正确的判断应该直接用Array.isArray(obj[key]),不需要加typeof。

其他需要修正的问题

  1. 测试用例错误:你的测试对象里key的值是字符串'[1000, 10, 50, 10]',而题目要求的是数组类型。字符串显然不是数组,这会导致判断逻辑一开始就不符合预期。
  2. 多余的循环:函数参数已经传入了指定的key,你完全不需要用for (let key in obj)遍历对象的所有键,这不仅多余,还会覆盖函数参数里的key变量,造成逻辑混乱。
  3. 不必要的原对象修改:你写的tenArray = obj.key = obj[key].filter(...)会直接修改原对象的key属性,但题目只要求返回符合条件的数组,不需要修改输入对象。
  4. 未声明变量:tenArray没有用let/var声明,会变成全局变量,这是不好的编程习惯,容易引发意外问题。

修正后的代码参考

结合正确解法的思路,修正后的代码应该是这样的:

// 注意测试对象的key值是数组,不是字符串
var obj = { key: [1000, 10, 50, 10] }; 

function getElementsThatEqual10AtProperty(obj, key) {
  // 正确判断是否为数组
  if (Array.isArray(obj[key])) {
    // 直接过滤符合条件的元素,不修改原对象
    let tenArray = obj[key].filter(element => element === 10);
    return tenArray;
  } else {
    // 不符合条件时返回空数组
    return [];
  }
}

console.log(getElementsThatEqual10AtProperty(obj, 'key')); // 输出 [10, 10]

调试方向总结

  • 先检查条件判断的正确性:确保你用的是直接的布尔判断,不要画蛇添足加typeof这类多余操作;
  • 验证输入测试用例的类型:确保传入的对象属性是题目要求的数组类型,而不是字符串或其他类型;
  • 去掉不必要的逻辑:比如多余的循环、原对象修改,聚焦题目要求的“返回符合条件的数组”核心需求;
  • 养成变量声明的好习惯:避免全局变量污染,用let/const声明局部变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:19:49