Javascript Typescript数组映射vs过滤器vs?
下面是一个typescript方法,它希望遍历一个字符串数组,并返回另一个字符串数组,其中,匹配regexp(格式类似“[la la la]”的字符串将变为“la la la”,不匹配的字符串将被删除。因此,如果我的输入数组是:Javascript Typescript数组映射vs过滤器vs?,javascript,typescript,Javascript,Typescript,下面是一个typescript方法,它希望遍历一个字符串数组,并返回另一个字符串数组,其中,匹配regexp(格式类似“[la la la]”的字符串将变为“la la la”,不匹配的字符串将被删除。因此,如果我的输入数组是: "[x]", "x", "[y]" 它变成 "x", "y" 这是我的密码: questions(): string[] { var regexp = /\[(.*)\]/; return this.rawRecords[0].map((value)
"[x]", "x", "[y]"
它变成
"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"
return this.rawRecords[0].reduce((acc, value) => {
console.log(value);
var match = regexp.exec(value);
if (match) {
acc.push(match[1]);
}
return acc;
}, []);
因为“if(match)”。编写此代码的正确typescript/javascript方式是什么?只需
过滤它们:
return this.rawRecords[0].map((value) => {
console.log(value);
var match = regexp.exec(value);
if (match) {
return match[1];
}
});
}).filter(x=>!!x);
我真的相信,有时候,我们会尝试去做比我们应该做的更实用的事情。
这有什么问题吗
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;
var regexp=/\[(.*)\]/;
var records=this.rawRecords[0];
var-res=[];
对于(变量i=0,len=records.length;i
它不是一行程序,即使我对TypeScript一无所知(您在问题中也询问了JavaScript),它也应该比任何函数式方法更有效。另一个选项是这样使用:
"x", undefined, "y"
return this.rawRecords[0].reduce((acc, value) => {
console.log(value);
var match = regexp.exec(value);
if (match) {
acc.push(match[1]);
}
return acc;
}, []);
请检查javascript中等效代码的结果。映射所做的是将函数应用于列表中的每个元素。当正则表达式不匹配时,函数不会返回任何值。因此,对于这种情况,JS可能会使其返回undefined。如果你想删除那些与regexp不匹配的,你应该马上使用filter
想想函数的名称,你会马上有更好的理解(将函数映射到列表并过滤列表)。我尝试了这个问题,并在下面分享了我的结果。希望这有帮助。请道歉,如果我失败或误解,因为我是新的打字脚本
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]);
}
var arr=[“[xy]”、“x”、“y”];
var-ele=[];
var i;
var-op;
var regex=/\[(.*)\]/;
变量op1=arr.filter((元素)=>
{
op=regex.exec(元素);
如果(op)
电推(op);
否则{
电推力(元件);
控制台日志(op);
}
});
对于(i=0;iYou可以在那之后尝试.filter(Boolean)
来去除未定义的。我不确定我是否同意你的观点……一旦我在头脑中理解了“map”(来自Ruby)的语义,我发现其中的一行/几行实际上更清晰了。(顺便说一句,我在学习TS的同时学习JS是一件不明智的事情。)(事实上,我知道一些js,但在web应用程序中只写了2行代码)我同意这在很多时候都是非常清晰的(我不使用TS,但使用了很多lodash/下划线)。但是在ruby世界中,你试图做的是在映射后调用,这被认为是错误设计代码的标志。过滤器是什么(x=>!!x)是吗?我知道过滤器的作用,但参数让我困惑。=>正在创建一个匿名函数,但我无法理解该特定表达式的工作原理!@pitosalas它只是在检查该值是否为真。x是一个值,!x是真的,如果x为空或假,!!x基本上将该值转换为布尔值。!!“=false!”=true!!!=true!!!=true!!“=not false”=正确