#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 да, ссылка была размещена мной 😉