【问题标题】:Assistance with Javascript question (student-in-training)协助解决 Javascript 问题(培训中的学生)
【发布时间】:2021-01-19 13:41:37
【问题描述】:

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

问题/说明:

编写一个名为“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;
}

我只是不明白为什么我的不起作用,为什么逻辑是错误的。而且我不明白正确代码的逻辑。非常感谢任何帮助!

【问题讨论】:

  • obj[key] !== [] 将永远是true
  • 另外,“正确”的代码是不必要的复杂;外部 for 循环没有意义。

标签: javascript for-loop object


【解决方案1】:

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

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

这也是函数式代码更好的一个很好的例子,而不是你可以使用的 for 循环:return obj[key].filter(val =&gt; val &gt; 10);

【讨论】:

    【解决方案2】:

    将此obj[key] !== [] 更改为!obj[key].length

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      相关资源
      最近更新 更多