打字稿数组映射vs过滤器vs?

时间:2015-07-02 01:04:37

标签: javascript typescript

这里有一个打字方法,想要遍历一个字符串数组,并返回另一个字符串数组,其中,字符串与正则表达式相匹配(格式化为" [la la la]&#34 ;将成为" la la la"并且不匹配的字符串将被删除。因此,如果我的输入数组是:

"x", "y"

它变成了

questions(): string[] {
    var regexp = /\[(.*)\]/;
    return this.rawRecords[0].map((value) => {
        console.log(value);
        var match = regexp.exec(value);
        if (match) {
            return match[1];
        }
    });
}

这是我的代码:

"x", undefined, "y"

我最终输出如下:

$($('#radio-btn').children()).click(function(){
    var input = $(this).is('input');
    input = input ? $(this).next() : $(this);
    $('.ui-state-active').removeClass('ui-state-active');
    input.addClass('ui-state-active');
    $('input').prop('checked','false');
    input.prev().prop('checked','true');
});

因为" if(匹配)"。编写此代码的正确打字稿/ javascript方式是什么?

5 个答案:

答案 0 :(得分:5)

只需filter他们出去:

return this.rawRecords[0].map((value) => {
        console.log(value);
        var match = regexp.exec(value);
        if (match) {
            return match[1];
        }
    });
}).filter(x=>!!x);

答案 1 :(得分:1)

将地图应用于列表中的每个元素的映射是什么。当正则表达式不匹配时,您的函数不会返回任何值。因此,可能JS使得它返回未定义的情况。如果你想丢弃与正则表达式不匹配的那些,你应该立即使用过滤器。

考虑函数的名称,您将立即更好地理解(映射将函数映射到列表并过滤列表)。

答案 2 :(得分:0)

我真的相信,有时候,我们会尝试比我们应该做的更多功能 这有什么问题:

var regexp = /\[(.*)\]/;
var records = this.rawRecords[0];
var res = [];

for (var i = 0, len = records.length; i < len; ++i) {
    var match = regexp.exec(records[i]);
    if (match) {
        res.push(match[1]);
    }
});

return res;

它不是一个单行,即使我对TypeScript一无所知(你在问题中也问过JavaScript),它也应该比任何功能方法更有效。 / p>

答案 3 :(得分:0)

另一种选择是像这样使用this

return this.rawRecords[0].reduce((acc, value) => {
    console.log(value);
    var match = regexp.exec(value);
    if (match) {
        acc.push(match[1]);
    }
    return acc;
}, []);

请在reduce() method中查看javascript中等效代码的结果。

答案 4 :(得分:0)

我尝试了这个问题,并在下面分享了我的结果。希望这可以帮助。如果我不熟悉TypeType脚本,请给我失败或误解表示歉意。

var arr = ["[xy]","x","y"];
var ele =[];
var i;
var op;
var regex = /\[(.*)\]/;
var op1 = arr.filter((element)=>
{
    op =regex.exec(element);
    if(op)
    ele.push(op);
    else{
        ele.push(element);
        console.log(op);
    }
    });
    for(i =0;i<ele.length;i++)
    {
        console.log(ele[i]);
    }