作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 JavaScript
新手,发现以下嵌套 for 循环
很糟糕:
$scope.parents = [];
for (var k = 0; k < $scope.children.length; k++) {
for (var i = 0; i < $scope.todos.length; i++) {
if($scope.todos[i].todosern == $scope.children[k].todosernm){
$scope.parents.push($scope.todos[i]);
}
}
}
任何人都可以告诉我如何利用 JavaScript 的函数功能,并以清晰、简洁的方式重写它,如果可能的话,不要使用 for 循环
。
虽然我的问题类似于 this question ,我相信它们的不同足以让我提出这个问题。
请仅包含所有现代浏览器都支持的结构,排除例如 includes
因为它是 not supported by IE or Android
编辑:
根据 Nina 的合理要求,这是我的数据模型:
var mongoose = require('mongoose');
var TodoSchema = new mongoose.Schema({
todosern: String,
todotype: String,
todosernm: String,
salmserna: String,
salmsernb: String,
todotask: String,
todostart: String,
todostartt: String,
todoend: String,
todoendt: String
});
module.exports = mongoose.model('Todo', TodoSchema);`
最佳答案
您可以使用一个对象作为哈希表,首先收集具有给定属性 todosernm
的所有子项,然后仅过滤哈希表中的子项。
var hash = Object.create(null);
$scope.children.forEach(function (a) {
hash[a.todosernm] = true;
});
$scope.parents = $scope.todos.filter(function (a) {
return hash[a.todosern];
});
对于更多函数式编程,您可以替换第一个 Array#forEach
与 Array#reduce
.
var hash = $scope.children.reduce(function (r, a) {
r[a.todosernm] = true;
return r;
}, Object.create(null));
$scope.parents = $scope.todos.filter(function (a) {
return hash[a.todosern];
});
关于javascript - 如何将 JavaScript 嵌套 For 循环替换为更清晰、简洁的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43737914/
我是一名优秀的程序员,十分优秀!