Как я могу получить доступ к существующему значению из массива? Думаю, я не передал массив внутрь? Любая помощь или совет
var isExist = this.props.isFavorite(this.props.code);
console.info(isExist)
У меня есть эта переменная isExist, содержащая ответ из консоли ниже.
[]
client: [id: "LvR05w9v9xrC3r4V1W8g", exist: true]
length: 1
_proto_:Array(0)
Как я могу получить доступ к существующим в моем массиве? Когда я пробовал isExist [0] .exist, я получаю сообщение об ошибке. Любая помощь?
isExist.exist = Undefined
isExist[0].exist = TypeError: Cannot read property 'exist' of undefined
любимый метод, при котором я получаю доступ и отправляю данные в массив
export const isFavorite = (data) => dispatch => {
let exist = [];
var clientQuery = firebase.firestore().collection(path).where('client_id', '==', data);
clientQuery.get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
var data = [];
data.id = doc.id;
data.exist = doc.exists;
exist.push(data)
});
});
return exist;
}
Вы создаете объект массива. Затем объект массива {данные} []. Итак, проблема в том, что данные на самом деле являются не только массивом, но и объектом.
Попробуй сделать это.
var data;
data.id = doc.id;
data.exist = doc.exist;
exist.push(data);
Теперь у вас будут существующие данные, которые будут массивом Object. Затем выполните итерацию от него.
exist[0].id;
//or try
exist[0].data.id;
//Depends on how you implement your data.
Привет, Айзен, index.js: 50 Uncaught (в обещании) TypeError: Невозможно установить свойство id of undefined
Вам не нужна временная переменная. exist.push({id: doc.id, exist: doc.exists})
Уджин, ты прав, Уджин, в этом нет необходимости. Но Джей Ар новичок в ООП, ты не можешь сказать? Помните об Уджине, отвечая на вопросы. Вы должны убедиться, что адаптировались к их способу программирования, вместо того, чтобы позволять им адаптироваться к вашему. Отвечайте их собственными шаблонами вместо того, чтобы переделывать их в соответствии с вашими лучшими практиками.
isFavorite
возвращает функцию, которая принимает один аргумент dispatch
и возвращает массив exist
. Кажется, вы используете асинхронный код для заполнения массива exist
. Поэтому, когда эта функция возвращает exist
, это пустой массив []
. Вам нужно либо продолжать использовать обещания, либо использовать await
. И вам нужно вызвать функцию, возвращаемую isFavorite
.
Если this.props.isFavorite
и const isFavorite
не совпадают, добавьте, пожалуйста, код для this.props.isFavorite
.
Поскольку клиентский массив не содержит объекта с ключами и значениями, я бы порекомендовал вам попробовать с массивом индекса с split (), чтобы получить значение идентификатора и существующее значение из массива, например
Нравиться
var isExist = this.props.isFavorite(this.props.code);
var id = isExist.client[0];
var exist = isExist.client[1];
var idValue = id ? id.split(': '): '';
console.info(idValue);
const existValue = exist ? exist.split(': '): false;
console.info(existValue);
А вот измените data = []; массив в data = {}; объект
querySnapshot.forEach((doc) => {
var data = {};
data.id = doc.id;
data.exist = doc.exists;
exist.push(data)
});
Какой тип данных переменной
isExist
?