Javascript Typescript-如果条件在地图中

Javascript Typescript-如果条件在地图中,javascript,typescript,dictionary,if-statement,Javascript,Typescript,Dictionary,If Statement,我正在将用户数据的子集映射到优化数据集的对象。在映射中,我想检查变量是否为null或未定义,如果是,则将该变量设置为占位符值 我面临的问题是,在映射内声明if语句会导致错误,但即使映射可以将索引作为参数,我们如何在功能上将其与条件语句一起使用?非常感谢您的任何见解 return this.UserService.search(url) .map((data) => { console.log(data); data.result = <any> data.res

我正在将用户数据的子集映射到优化数据集的对象。在映射中,我想检查变量是否为null或未定义,如果是,则将该变量设置为占位符值

我面临的问题是,在映射内声明if语句会导致错误,但即使映射可以将索引作为参数,我们如何在功能上将其与条件语句一起使用?非常感谢您的任何见解

return this.UserService.search(url)
.map((data) => {
    console.log(data);
    data.result = <any> data.result.map((user, index) => ({
        // if statement causing error here
        if(user.name === null || user.name === undefined){
            // error with this if condition
        },
        id: user.id,
        name: user.name,
        type: user.type,
        password: user.password,
    }));
    return data;
}).map(data => ({
    meta: { totalItems: data.size },
    data: data.result,
}));
返回此.UserService.search(url)
.map((数据)=>{
控制台日志(数据);
data.result=data.result.map((用户,索引)=>({
//在此处导致错误的if语句
if(user.name==null | | user.name==未定义){
//此if条件出错
},
id:user.id,
name:user.name,
类型:user.type,
密码:user.password,
}));
返回数据;
}).map(数据=>({
meta:{totalItems:data.size},
数据:data.result,
}));

您试图使用对象文字作为返回类型,但自然地,
if
语句(或任何语句)不能在对象文字语法内

因此,请定义一个函数体,它也使用大括号,并使用显式的
return
语句将代码放在其中

// Starts function body instead of single expression-v
data.result = <any> data.result.map((user, index) => {

    if (some_condition) {
       return "some value"; // The object?
    } else {
       return "other value"; // A different object?
    }
  /*
    // I assume these are to be used in the object you return
    id: user.id,
    name: user.name,
    type: user.type,
    password: user.password, 
  */
});
//启动函数体而不是单个表达式-v
data.result=data.result.map((用户,索引)=>{
如果(某些条件){
返回“some value”;//对象?
}否则{
返回“其他值”;//是否为其他对象?
}
/*
//我假设这些将用于您返回的对象
id:user.id,
name:user.name,
类型:user.type,
密码:user.password,
*/
});

您试图使用对象文字作为返回类型,但自然地,
if
语句(或任何语句)不能在对象文字语法内

因此,请定义一个函数体,它也使用大括号,并使用显式的
return
语句将代码放在其中

// Starts function body instead of single expression-v
data.result = <any> data.result.map((user, index) => {

    if (some_condition) {
       return "some value"; // The object?
    } else {
       return "other value"; // A different object?
    }
  /*
    // I assume these are to be used in the object you return
    id: user.id,
    name: user.name,
    type: user.type,
    password: user.password, 
  */
});
//启动函数体而不是单个表达式-v
data.result=data.result.map((用户,索引)=>{
如果(某些条件){
返回“some value”;//对象?
}否则{
返回“其他值”;//是否为其他对象?
}
/*
//我假设这些将用于您返回的对象
id:user.id,
name:user.name,
类型:user.type,
密码:user.password,
*/
});

据我所知,仅凭一张地图是无法做到这一点的。 但是,您可以使用filter()函数进行后续操作:

const newArray = oldArray.map((value, index) => condition ? value : null).filter(v => v);
您基本上迭代每个项,然后根据您的条件返回值或null。 现在,一旦有了映射,就可以通过从数组中删除空值来过滤它

请注意,原始数组没有更改,而是返回了一个新数组。
感谢@user8897421的创意。我只是想把它变成一条直线。

据我所知,仅仅一张地图是做不到的。 但是,您可以使用filter()函数进行后续操作:

const newArray = oldArray.map((value, index) => condition ? value : null).filter(v => v);
您基本上迭代每个项,然后根据您的条件返回值或null。 现在,一旦有了映射,就可以通过从数组中删除空值来过滤它

请注意,原始数组没有更改,而是返回了一个新数组。
感谢@user8897421的创意。我只是想把它变成一行。

你可以用文字映射来表达条件,但它有点难看

return {
 a: 1,
 ...(some_condition && {
  b: 1,
 })
};

可以用文字映射来表示条件,但这有点难看

return {
 a: 1,
 ...(some_condition && {
  b: 1,
 })
};

什么错误?当然,您可以在映射函数中使用
if
语句。请提供一些示例输入和所需的输出,否则不清楚您在这里要做什么。请参阅原始帖子中的代码。我试图返回{id name type and password}的数据集,但在设置之前,id首先要检查type的值。什么错误?当然,您可以在映射函数中使用
if
语句。请提供一些示例输入和所需的输出,否则不清楚您在这里要做什么。请参阅原始帖子中的代码。我试图返回{id name type and password}的数据集,但我想先检查type的值,然后再进行设置。user
if-else
user
if-else