Перебор объекта базы данных и добавление данных к объекту с определенным значением ключа в Javascript

#javascript #reactjs #firebase #firebase-realtime-database

#javascript #reactjs #firebase #firebase-realtime-database

Вопрос:

Я использую react JS и храню данные в состоянии в базе данных Firebase. Я пытаюсь выполнить итерацию по массиву posts и прикрепить входные данные, т.е. «ответ»: «это ответ на объект с ключом, соответствующим значению идентификатора, переданному в postAnswerHandler.

Я пытаюсь использовать оператор if, чтобы указать, соответствует ли ключ идентификатору переменной, а затем добавить данные к этому объекту.

Однако я не могу заставить этот оператор if работать.

  state = {
        posts: [{"key":"-MRp_IicTzCu5AineeBB",
                 "answer":"hhhh"},

                {"key":"-MRpgKN1bFHC3pUSGoqn",
                 "answer":"gd"},

                 {"key":"-MRpkG08WrtPyW2rVKPb",
                 "body":"post 3",
                 "title":"post 3", 
                  "type":"Credit"}]
    }
 
 postAnswerHandler = ( answer,id ) => {
        
            const data = this.state.posts;
            for (var key in data) {
                
                if (key === id) {
                       *** APPEND DATA HERE***
                              }; 
                    var obj = data[key];
                    var obj_1 = JSON.stringify(obj);
                        
                            for (var prop in obj) {
                                if(obj.hasOwnProperty(prop)){
                                    
                   
                   }
                }
                
             }

            const postData = JSON.stringify(this.state.posts);
 

Комментарии:

1. Тот факт, что вы назвали переменную ‘key’, не делает ее ключом. Вы должны перебирать объекты в массиве и получать значение для каждого ключа. Что-то вроде for (obj данных) {if (obj[‘key’] === id) {}}

2. @whats_done_is потрясающе, спасибо, это сработало! теперь имеет смысл взглянуть и на это. Теперь я думаю, что могу добавить данные к этому конкретному объекту и использовать axios.put для отправки их в базу данных.

Ответ №1:

Ваш «ключ» на самом деле является индексом массива, а не фактическим ключом, который вы ищете.

Вы должны выполнить итерацию по объектам в массиве и сравнить каждый ключ, называемый ‘key’, с идентификатором, который вы ищете.

 for (const obj of data) {
  if (obj['key'] === id) {
    // do something with obj['answer']  
  }
}
 

Комментарии:

1. да, имеет смысл, я предполагал, что ключ был передан автоматически, а не перебирал строковое значение ‘key’ ключей.