([JavaScript) Я не могу получить доступ к значению с помощью целочисленной клавиши объекта - PullRequest
0 голосов
/ 11 апреля 2020

Как описывает заголовок, я не могу получить доступ к значениям объекта ниже.

1: {id: 38, user_id: 3, review_id: 1, created_at: "2020-04-11T04:12:14.569Z", updated_at: "2020-04-11T04:12:14.569Z"}
2: {id: 24, user_id: 3, review_id: 2, created_at: "2020-04-11T03:25:16.589Z", updated_at: "2020-04-11T03:25:16.589Z"}
3: {id: 20, user_id: 3, review_id: 3, created_at: "2020-04-09T12:07:34.669Z", updated_at: "2020-04-09T12:07:34.669Z"}

Этот объект хранится в likes, а ключи - в reviewId. Я подтвердил, что эти две переменные успешно сохранены с помощью инструмента chrome dev. проверка объекта проверка reviewId

Я пробовал следующие способы доступа к значениям, ни одно из которых не сработало:

   if (likes) {
        console.log('reviewId is now ', reviewId);
        console.log('like of this reviewId is now ', likes['1']);
        console.log('like of this reviewId is now ', likes[`${reviewId}`]);
        console.log('like of this reviewId is now ', likes[reviewId]);
        console.log('like of this reviewId is now ', likes[String(reviewId)]);
        console.log('like of this reviewId is now ', likes.reviewId);
    }

Если я понимаю правильно, ключи с целым числом будут преобразованы в строку, поэтому я должен иметь доступ к значениям по крайней мере с likes['1']. Наверное, там может быть какая-то другая проблема, кроме того, как мне получить доступ?

Дайте мне знать, если у вас есть предложения. Спасибо.

[Дополнения] Пожалуйста, обратитесь к следующим кодам, которые могут быть связаны с этой проблемой. Я использую Redux + Hooks.

<./actions/like.js>
import axios from 'axios';
import * as actionTypes from './actionTypes';

export const setLike = likes => {
    return {
        type: actionTypes.SET_LIKE,
        likes: likes,
    };
};

export const fetchLike = (likes, userId, reviewId) => {
    return dispatch => {
        const url = `http://localhost:3001/users/${userId}/reviews/${reviewId}/likes/1`;
        axios
            .get(url)
            .then(response => {
                likes[reviewId] = response.data; 
                dispatch(setLike(likes));
            })
            .catch(error => {
                console.log(error);
            });
    }
};
<./reducer/like.js>
import * as actionTypes from '../actions/actionTypes';
import { updateObject } from './utility';

const initialState = {
    likes: {},
};

const setLike = (state, action) => {
    return updateObject(state, {
        likes: action.likes,
    });
};

const reducer = (state = initialState, action) => {
    switch (action.type) {
        case actionTypes.SET_LIKE:
            return setLike(state, action);
        default:
            return state;
    }
};

Демо:

const likes = {
  1: {
    id: 38,
    user_id: 3,
    review_id: 1,
    created_at: "2020-04-11T04:12:14.569Z",
    updated_at: "2020-04-11T04:12:14.569Z"
  }
};
const reviewId = 1;

console.log('like of this reviewId is now ', likes['1']);
console.log('like of this reviewId is now ', likes[`${reviewId}`]);
console.log('like of this reviewId is now ', likes[reviewId]);
console.log('like of this reviewId is now ', likes[String(reviewId)]);
console.log('like of this reviewId is now ', likes.reviewId);
.as-console-wrapper {max-height: 100% !important;top: 0;}

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Я полагаю, что вы можете пропустить шаг в бурении до нужного слоя вашего объекта лайков. Похоже, вы прыгнули прямо с внешнего слоя на внутренний слой каждого пронумерованного объекта.

Вы пробовали:

likes.1.reviewId

Ваша первая попытка (см. Ниже) должна быть возвращает объект, но еще не даст вам обзор. Я понимаю, что вы ищете.

likes['1']

РЕДАКТИРОВАТЬ:

Я считаю, что правильный синтаксис должен быть:

console.log(likes["1"].review_id);
0 голосов
/ 11 апреля 2020

Это объекты. Вы должны определить массив JS как

arr = [1, 2, 3];

, а затем вывести

console.log(arr[0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...