首页 > 解决方案 > 协助解决 Javascript 问题(培训中的学生)

问题描述

如果有人能够帮助解释为什么我提交的代码不正确以及 为什么提供的正确代码有效以及为什么,我将不胜感激。

问题/说明:

编写一个名为“getElementsGreaterThan10AtProperty”的函数。

给定一个对象和一个键,“getElementsGreaterThan10AtProperty”返回一个数组,其中包含位于给定键处的数组中大于 10 的元素。

笔记:

如果数组为空,它应该返回一个空数组。

如果数组不包含大于 10 的元素,它应该返回一个空数组。

如果给定键的属性不是数组,它应该返回一个空数组。

如果键没有属性,它应该返回一个空数组。

*Example output: var obj = {
  key: [1, 20, 30]
};
var output = getElementsGreaterThan10AtProperty(obj, 'key');
console.log(output); // --> [20, 30]*

我的代码(不满足所有 5 个通过要求):

function getElementsGreaterThan10AtProperty(obj, key) {
    let newArr = [];
    if (Array.isArray(obj[key]) === false || obj[key] !== [] || obj[key] === undefined){
        return [];
    }
    for (let i in obj[key]){
        if (i > 10){
            newArr.push(i);
        }
    }
    return newArr;
}

我的代码结果:

✗ 它应该返回一个数组,其中包含位于键错误的数组中所有大于 10 的元素:预期 [] 深度等于 [20, 40]

✓ 如果数组中没有大于 10 的元素,它应该返回一个空数组

✓ 如果数组为空,它应该返回一个空数组

✓ 如果属性不是数组,它应该返回一个空数组

✓ 如果属性不存在,它应该返回一个空数组

正确的代码(在网上找到):

> function getElementsGreaterThan10AtProperty(obj, key) {
  var greaterThan10 = [];
  for (var property in obj) {
    if (property === key) {
      for (var i = 0; i < obj[key].length; ++i) {
        if (obj[key][i] > 10) {
          greaterThan10.push(obj[key][i]);
        }
      }
    }
  }
  return greaterThan10;
}

我根本不明白为什么我的不起作用,为什么逻辑是错误的。而且我不明白正确代码的逻辑。任何帮助是极大的赞赏!

标签: javascriptfor-loopobject

解决方案


let i in obj[key]变量i中将不是值(例如 20),而是索引。所以你可以通过obj[key][i].

Pointy 在他的评论中也是正确的,obj[key] !== []这没有意义,应该被删除。

这也是功能代码更好的一个很好的例子,因为你可以使用 for 循环:return obj[key].filter(val => val > 10);


推荐阅读