javascript - 协助解决 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;
}
我根本不明白为什么我的不起作用,为什么逻辑是错误的。而且我不明白正确代码的逻辑。任何帮助是极大的赞赏!
解决方案
在let i in obj[key]
变量i
中将不是值(例如 20),而是索引。所以你可以通过obj[key][i]
.
Pointy 在他的评论中也是正确的,obj[key] !== []
这没有意义,应该被删除。
这也是功能代码更好的一个很好的例子,因为你可以使用 for 循环:return obj[key].filter(val => val > 10);
推荐阅读
- r - R - 如何根据数据框中其他列的总和最大化
- reactjs - 通过 componentDidMount 中的道具设置状态的问题
- angular - 获取布尔选项值
- excel - Bloomberg Excel API:使用 ISIN 和缺少股票数据
- ruby - Capybara 为什么不填写我的文本字段?
- elasticsearch - 用于 Elasticsearch 的反应式 API
- java - OSGi 原型组件的初始化
- nginx - 如何将 nginx 配置为代理 ws (websocket) 协议
- apache - Apache 2.4反向代理http到https不重新发送cookie
- android - 从索引中排除单个 java 文件?