Javascript中的过滤对象
我有这样的数据结构: 这是my chats组件的源代码: 每个聊天室都有两个成员,我想在聊天室列表中显示其他人的数据配置文件、图片和用户名。所以我想删除不必要的数据。我使用firebase实时数据库。 这就是我试图去除不必要数据的方式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
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.
});
当您引用callsnapshot.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.
});