gpt4 book ai didi

javascript - 如何将 JavaScript 嵌套 For 循环替换为更清晰、简洁的内容?

转载 作者:行者123 更新时间:2023-11-28 12:18:31 25 4
gpt4 key购买 nike

我是 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#forEachArray#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com