这里有一个打字方法,想要遍历一个字符串数组,并返回另一个字符串数组,其中,字符串与正则表达式相匹配(格式化为" [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方式是什么?
答案 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]);
}