[Javascript] Compare a Generator to Using Array Map and Filter

人盡茶涼 提交于 2020-01-08 19:16:11

Generators offer flexible alternatives to working with arrays and how you want to iterate through the data. While most scenarios are covered by the methods included on Arrays such as "map" and "filter", generators are great for covering complex scenarios when writing all your logic in map and filter functions might become difficult.

 

let names = ["John", "Mindy", "Sally"]

let result = names.filter(name => name.includes("y")).map(name => name.toLocaleLowerCase())
console.log(result) // ["mindy", "sally"]

// -- Generator --

function* format(array: string[]) {
    for (let name of array) {
        if (name.includes("y")) {
            yield name.toLowerCase();
        }
    }
}

console.log([...format(names)]); //["mindy", "sally"]

 

With Generator, we can do more control on result.

let names = ["John", "Mindy", "Sally"]

let result = names.filter(name => name.includes("y")).map(name => name.toLocaleLowerCase())
console.log(result) // ["mindy", "sally"]

// -- Generator --

function* format(array: string[]) {
    for (let name of array) {
        if (name.includes("y")) {
            yield name.toLowerCase(); // ["mindy", "sally"]
            yield name.toUpperCase(); // ["mindy", "MINDY", "sally", "SALLY"]
            yield* array; // ["mindy", "MINDY", "John", "Mindy", "Sally", "sally", "SALLY", "John", "Mindy", "Sally"]
            yield 'END'; // ["mindy", "MINDY", "John", "Mindy", "Sally", "END", "sally", "SALLY", "John", "Mindy", "Sally", "END"]
        }
    }
}

console.log([...format(names)]);

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!