将新类实例中的数据存储在数组中

Store data from new class instance in an array

本文关键字:存储 数组 数据 新类 实例      更新时间:2023-09-26

我想创建4个新用户,

let JonSnow = new User({ id: 1, name: 'Jon Snow', status: Status.user });
let AryaStark = new User({ id: 2, name: 'Arya Star', status: Status.user });
let SansaStark = new User({ id: 3, name: 'Sansa Stark', status: Status.user });
let JoffreyBaretheon = new User({ id: 4, name: 'Joffrey Baretheon', status: Status.user });

在我的User类中,我有一个allUser函数,

allUsers() {
    let users: IUser[] = [];
    let user: IUser = {
        id: this.id,
        name: this.name,
        status: this.status
    }
    users.push(user);
    users.forEach((user) => console.log(user));
    return users;
}

如果我这样调用函数,

JonSnow.allUsers();
AryaStark.allUsers();
SansaStark.allUsers();
JoffreyBaretheon.allUsers();

正如预期的那样,它调用allUsers函数4次。

如何将所有4个新用户存储到一个阵列中?所以我只需要调用一次函数就可以显示所有用户?

您可以有一个模块/命名空间变量(不要导出它,这样它就无法从外部访问),如下所示:

let users: IUser[] = [
    new User({ id: 1, name: 'Jon Snow', status: Status.user }),
    new User({ id: 2, name: 'Arya Star', status: Status.user }),
    new User({ id: 3, name: 'Sansa Stark', status: Status.user }),
    new User({ id: 4, name: 'Joffrey Baretheon', status: Status.user })
]

然后你有一个简单的方法:

allUsers(): IUser[] {
    return users.slice(0);
}

请注意,我克隆了users数组,这样,获得对它的引用的人就无法更改这个内部数组,但这不是必须的。

但并没有真正需要在所有类中都有这个方法,您可以使它成为静态的
但是您也可以使这个数组成为User类的静态成员,因此:

class User {
    private static users: IUser[] = [];
    constructor() {
        User.users.push(this);
    }
    static allUsers(): IUser[] {
        return User.users.slice(0);
    }
}

您可以获取所有用户:User.allUsers()

您似乎只是在尝试将一堆User实例转换为一个IUser对象数组。

我要做的是提供一个返回IUser对象的User类方法:

public toIUser():IUser {
    return {
        id: this.id,
        name: this.name,
        status: this.status
    }
}

然后简单地使用以下函数映射您的实例:

let allUsers = [JonSnow, AryaStark, SansaStark, JoffreyBaretheon].map(user => user.toIUser());
console.log("all users:", allUsers);

这里是游乐场的例子。

附言:我会避免使用static变量作为您的解决方案。

将静态User变量声明为数组:

User.users = []

User构造函数中,将当前对象添加到数组:

User.users.push(this)

然后在allUsers中返回数组:

allUsers() {
  return User.users
}