javascript - Javascript没有像预期的那样迭代
问题描述
谁能告诉我为什么我的 JS 没有遍历循环并删除数组中不是“10”的项目?
据我了解,它应该检查数组中的每个项目并删除任何不是 10 的项目,然后返回剩余的“10”项目。
我目前的输出是: [ <1 empty item>, 10, 50, 10 ]
我已经看到了一些答案,它们创建了一个单独的数组并将 10 的项目推送到它,然后返回,但为什么我的代码不起作用?
function getElementsThatEqual10AtProperty(obj, key) {
if (obj.key.length === 0) {
return [];
} else if (!obj.hasOwnProperty(key)) {
return [];
} else {
for (var i = 0; i < obj.key.length; i++) {
if (obj[key][i] !== 10) {
delete obj[key][i];
}
return obj.key;
}
}
}
var obj = {
key: [1000, 10, 50, 10]
};
var output = getElementsThatEqual10AtProperty(obj, 'key');
console.log(output);
解决方案
这是一种奇怪的方法设计。它变异并返回结果?一般来说,最好是做一个或另一个(参见CQS)。
此外,您的原始方法与对象结构过度耦合。最好让它只在一个数组上操作,而不是任意对象键。
考虑以下:
function getElementsThatEqual10(array) {
return array.filter(n => n == 10);
}
var obj = {
key: [1000, 10, 50, 10]
};
var output = getElementsThatEqual10(obj.key);
console.log(output);
推荐阅读
- java - 我可以将循环作为参数传递给构造函数吗
- apache - Apache 不在任何端口上启动
- css - 如何并排对齐反应组件
- javascript - 错误:TypeError: undefined is not an object in Java Script
- sql - 具有 Group BY、ORDER BY 子句的 SQL Server SELECT 查询中的两次相同的列
- django - 如何为 django 用户 defiend admin 操作设置详细名称
- reactjs - Visual Studio Code 调试 - Jest 断点未按预期工作
- mongodb - 服务器上执行了多少 mongo shell 命令的 javascript 部分?
- javascript - 如何使用具体化 css 移动到下一个/上一个选项卡?
- javascript - 当我过滤而不是显示随机序列但我希望序列中的过滤结果中没有序列时