Фильтрующий объект в Javascript реагирует на родную - PullRequest
1 голос
/ 04 мая 2020

У меня есть такая структура данных: Это исходный код моего чата: https://pastebin.com/JJQFQyHi enter image description here

в каждом чате есть два участника, я хочу отобразить данные других людей profile_picture и имя пользователя в моем списке чата. Поэтому я хочу удалить ненужные данные. Я использую базу данных 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]}}}

1 Ответ

0 голосов
/ 04 мая 2020

Когда вы ссылаетесь на вызов snapshot.val(), вы получаете объект, который вы показали в журнале консоли. Это значение затем присваивается data.

. При попытке delete ключей от этого data объекта Javascript пытается удалить их с верхнего уровня объекта. Поскольку на верхнем уровне нет свойств с заданными именами (members или _userId), он не может ничего отфильтровать.

Если вам нужен список tempuser с, вы можете создать его, используя forEach метод snapshot.

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

  console.log(userData); // this should contain the tempusers.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...