Как найти данные в массиве массивов?

#javascript #arrays #reactjs #firebase #google-cloud-firestore

#javascript #массивы #reactjs #firebase #google-облако-firestore

Вопрос:

У меня есть массив массивов, я знаю, что это непрактично, но компонент, который я использую, отображает (используя React.js ) данные только как массив массивов Я удаляю некоторый элемент этого массива в бэкэнде (Firestore), и мне нужно удалить данные из этого массива во внешнем интерфейсе. Массив:

 const myData = [
  ["2020-09-14", "15:00", "60", "Info", "April Tucker", "Other", "no"],
  ["2020-09-14", "2:00", "50", "Text", "April Tucker", "Other", "yes"]
]
  

Когда я удаляю данные в серверной части, я получаю данные, которые я удалил как change.doc.data() . Затем я пытаюсь найти индекс удаленных данных в состоянии myData.

   if (change.type === 'removed') {
          console.log('Removed data: ', change.doc.data())
          const index = myData.indexOf(
            (element) =>
              element[0] == change.doc.data()[0] amp;amp;
              element[1] == change.doc.data()[1] amp;amp;
              element[2] == change.doc.data()[2] amp;amp;
              element[3] == change.doc.data()[3] amp;amp;
              element[4] == change.doc.data()[4] amp;amp;
              element[5] == change.doc.data()[5] amp;amp;
              element[6] == change.doc.data()[6]
          )
          console.log(index)
          mydata.splice(index, 1)
       
        }
  

Это не работает, возвращая индекс -1. Я также попытался отобразить массив myData, но мой подход не был успешным.

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

1. Ваша логика … странная? indexOf находит индекс массива «some thing», но вы передаете функцию со стрелкой, которая, поскольку вы только что определили ее и поэтому это новый дескриптор, гарантированно отсутствует в вашем массиве. Сказав это, что вы делаете в этой функции со стрелкой? (зачем использовать == вместо === ? Почему тестируется только семь элементов? Зачем делать это отдельными шагами вместо использования выделенной функции сравнения массивов? и т.д.)

2. Итак, как бы вы сделали это наилучшим образом?

3. взгляните на medium.com/better-programming /…

4. Спасибо за ссылку. Похоже, это именно то, что мне нужно. 👏

5. Привет @JavaMan Ваш комментарий помог. Я рекомендую вам опубликовать это в качестве ответа.

Ответ №1:

Я бы посоветовал вам взглянуть на этот сайт

Особенно в следующем методе, который должен помочь вам начать:

 function arrayAlreadyHasArray(arr, subarr){
    for(var i = 0; i<arr.length; i  ){
        let checker = false
        for(var j = 0; j<arr[i].length; j  ){
            if(arr[i][j] === subarr[j]){
                checker = true
            } else {
                checker = false
                break;
            }
        }
        if (checker){
            return true
        }
    }
    return false
}
  

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

1. Ссылка уже была опубликована в разделе комментариев выше! Но спасибо.

2. @radmin1 да, ссылка была размещена мной 😉