javascript 返回新对象前键入if conditional脚本

af7jpaap  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(104)

我写了一段代码,它将数据集的值Map到一个新对象。
我希望在将数据集中的某个变量赋给新对象变量之前检查它。为此,我将使用if条件。如何使用Typescript中的Map来实现这一点。如果我尝试编译以下代码,它将返回错误。
如果我试图在console.log行执行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,
}));
yx2lnoni

yx2lnoni1#

基本语法问题。请按以下方式更改Map代码

data.result = <any> data.result.map((user, index) => {
  if (user.name === null || user.name === undefined) {

  }
  return {
    id: user.id,
    name: user.name,
    type: user.type,
    password: user.password,
  }
});

或者,使用三元运算符

data.result = <any> data.result.map((user, index) => ({
    id: user.id,
    name: (user.name === null || user.name === undefined) ? "???" : user.name,
    type: user.type,
    password: user.password,
}));

不确定在我放置"???"的地方需要放置什么-因为您还没有说明当条件为真时要做什么

uxhixvfz

uxhixvfz2#

我可能会给www.example.com方法添加一个返回类型UserService.search,这样你就可以完成代码,编译器也会很高兴。

interface User {
    id: number;
    name: string;
    type: string;
    password: string;
}
class UserService {
    async search(url: string): Promise<User[]> {
        const response = await fetch(url);
        return response.json();
    }
}

class Foo {
    constructor(private UserService: UserService) {}

    async bar() {
        const users = await this.UserService.search("/users");
        return users.map((user) => {
            if (!user.name) {
                // error...
            }
        })
    }
}

Playground链接。

相关问题