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

时间:2016-05-06 14:25:46

标签: javascript typescript

我想创建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个新用户存储到一个阵列中?所以我只需要调用一次该函数来显示所有用户?

3 个答案:

答案 0 :(得分:1)

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

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()

答案 1 :(得分:1)

您似乎只是想将一堆User个实例转换为IUser个对象的单个数组。

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

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);

Playground example here

PS:我会avoid using static variables作为你的解决方案。

答案 2 :(得分:0)

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

User.users = []

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

User.users.push(this)

然后在allUsers中返回数组:

allUsers() {
  return User.users
}