Javascript中的过滤对象

Javascript中的过滤对象,javascript,firebase,react-native,object,firebase-realtime-database,Javascript,Firebase,React Native,Object,Firebase Realtime Database,我有这样的数据结构: 这是my chats组件的源代码: 每个聊天室都有两个成员,我想在聊天室列表中显示其他人的数据配置文件、图片和用户名。所以我想删除不必要的数据。我使用firebase实时数据库。 这就是我试图去除不必要数据的方式 getChats = _userId => { let data; var readedData = firebase .database() .ref('chats') .orderByChild('m

我有这样的数据结构: 这是my chats组件的源代码:

每个聊天室都有两个成员,我想在聊天室列表中显示其他人的数据配置文件、图片和用户名。所以我想删除不必要的数据。我使用firebase实时数据库。 这就是我试图去除不必要数据的方式

getChats = _userId => {
    let data;
    var readedData = firebase
      .database()
      .ref('chats')
      .orderByChild('members/' + _userId)
      .equalTo(true);
    readedData.once('value', snapshot => {
      this.setState({ chats: snapshot.val() });
      // console.log(JSON.stringify(this.state.chats));
      data = snapshot.val();
      delete data._userId;
      delete data.members;
      console.log(data);
    });
  };
控制台日志:

> {"-M4NzlagjmeFH7IR_Api": {"lwcIQTcpAae4e38hrD2K5Ar76W93": {"data":
> [Object]}, "members": {"lwcIQTcpAae4e38hrD2K5Ar76W93": true,
> "tempuser": true}, "tempuser": {"data": [Object]}},
> "-M4O-aIxt9w2iKuCDweN": {"lwcIQTcpAae4e38hrD2K5Ar76W93": {"data":
> [Object]}, "members": {"lwcIQTcpAae4e38hrD2K5Ar76W93": true,
> "tempuser": true}, "tempuser": {"data": [Object]}},
> "-M4Q05H1lEUIyWqLJyoQ": {"lwcIQTcpAae4e38hrD2K5Ar76W93": {"data":
> [Object]}, "members": {"lwcIQTcpAae4e38hrD2K5Ar76W93": true}},
> "-M649remSnfBLBuYJIXO": {"lwcIQTcpAae4e38hrD2K5Ar76W93": {"data":
> [Object]}, "members": {"lwcIQTcpAae4e38hrD2K5Ar76W93": true,
> "tempuser": true}, "messages": {"-M64A0ydh-WJstJIFIr1": [Object],
> "-M66cLC6OjQhlyNN5uDq": [Object], "-M66eWivUodiVtHIkfGv": [Object]},
> "tempuser": {"data": [Object]}}}

当您引用call
snapshot.val()
时,您会得到一个对象,如您在控制台日志中所示。然后将该值分配给
数据

当您尝试从这个
数据
对象中
删除
键时,Javascript会尝试从对象的顶层删除它们。由于顶层没有具有给定名称(
members
\u userId
)的属性,因此它无法筛选出任何内容

如果需要
tempuser
s的列表,可以使用
snapshot
forEach
方法构建它

readedData.once("value", (snapshot) => {
  const userData = [];
  snapshot.forEach((data) => {
    userData.push(data.tempuser)
  });

  console.log(userData); // this should contain the tempusers.
});

当您引用call
snapshot.val()
时,您会得到一个对象,如您在控制台日志中所示。然后将该值分配给
数据

当您尝试从这个
数据
对象中
删除
键时,Javascript会尝试从对象的顶层删除它们。由于顶层没有具有给定名称(
members
\u userId
)的属性,因此它无法筛选出任何内容

如果需要
tempuser
s的列表,可以使用
snapshot
forEach
方法构建它

readedData.once("value", (snapshot) => {
  const userData = [];
  snapshot.forEach((data) => {
    userData.push(data.tempuser)
  });

  console.log(userData); // this should contain the tempusers.
});