javascript - 如何将循环重写为递归

标签 javascript recursion

我实现了一个搜索功能并循环按集合搜索。在第一次迭代中,我需要按所有集合进行搜索,但所有下一次迭代仅按第一次迭代的结果进行搜索。我使用 if 语句 if (i >= 1) collection = result; 来执行此操作,但它不安全,因为我需要保存集合。是否可以将循环重写为递归函数?我怎样才能使它或使我的代码变得优雅?

var targets = target.split(' '); // => ['hello', 'world'];

for (var i = 0; i < targets.length; ++i) {
    if (i >= 1) {
        collection = result;
    }
    result = includes(collection, props, targets[i]);
}

我的搜索功能:

function includes(collection, props, target) {
    var result = [];
    var collection_length = collection.length;
    var props_length = props.length;
    var target_length = target.length;

    for (var i = 0; i < collection_length; ++i) {
        for (var j = 0; j < props_length; ++j) {
            if (collection[i][props[j]]) {
                if (collection[i][props[j]].toLowerCase().slice(0, target_length) === target) {
                    result.push(collection[i]);
                    continue;
                }
            }
        }
    }

    return result.length !== 0 ? result : false;
} 

最佳答案

var result = collection;
for (var i = 0; i < targets.length; ++i) {
    result = includes(result, props, targets[i]);
}

也许我错过了一些东西,但这不是你想要做的吗?

关于javascript - 如何将循环重写为递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31488723/

相关文章:

Firefox 上的 Javascript 浏览器抖动

javascript - 简单的ajax调用,没有语法错误。还是行不通

javascript - 当 HTML 可能有子元素时,如何使用 Javascript 将 HTML 文本替换为新文本

Javascript 对象到具有多个级别的 XML 字符串

c++ - 数组 : mathematical sequence

C:元素个数奇数的数组归并排序

javascript - 元素未在 FireFox 和 Opera 上显示,但在 Chrome 和 Safari 上可以正常工作

javascript - D3.js exit().remove() 不会删除数据/行

Java : recursive constructor call and stackoverflow error

python - 为什么递归次数9小于递归限制?