【发布时间】: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