#javascript
Вопрос:
У меня есть фиктивный ответ api, состоящий из массива результатов, в котором есть объекты. Когда я пытаюсь сопоставить этот массив и пытаюсь получить доступ к свойствам каждого отдельного объекта внутри другого создаваемого мной объекта, он выдает ошибку. Есть идеи, что может быть не так?
вот фрагмент кода
import { result } from "./partnership_rewards_response.json";
result.map((partner,index)=>{
const obj = {
partner.name,
partner.class
}
})
и вот как выглядит мой файл json
{
"result":[obj1, obj2, ...]
}
и ошибка, которую я получаю, заключается в том, что Parsing error: Unexpected token, expected ","
РЕДАКТИРОВАТЬ: Я забыл указать, я пытаюсь заполнить содержимое в react с помощью useState. таким образом, структура объекта уже инициализирована в значении по умолчанию
EDIT2: вот как я пытаюсь его заполнить
const [showModal, setModal] = useState(false);
const [modalContent, setModalContent] = useState({
partner_name: "",
coupon_image:"",
coupon_code : "",
coupon_content:"",
terms:"",
redemption_steps:"",
});
setModalContent(
{
partner.partner_logo,
partner.coupon_image
}
)
Ответ №1:
Проблема в том, что вы пытаетесь использовать сокращенную запись свойств в литерале объекта , но вы можете это сделать только в том случае, если источником значения свойства является простой идентификатор, например example
, а не выражение свойства, например person.name
. Если источником значения является не просто идентификатор, вместо него необходимо использовать «старый» (до ES2015) синтаксис полного свойства ( name: value
).
Вам нужно явно указать имя свойства:
result.map((partner,index)=>{
const obj = {
name: partner.name,
class: partner.class,
};
// ...I assume there's more here...
})
или повторно отредактируйте (сбивает с толку то, что вы изменили имена свойств):
setModalContent({
partner_logo: partner.partner_logo,
image: partner.image,
});
Вы также можете сделать это с помощью деструктурирования и сокращенной записи свойств:
result.map(({name, class},index)=>{
const obj = {
name,
class,
};
// ...I assume there's more here...
})
или повторно отредактируйте, если вы разрушили person
, вы могли бы сделать:
setModalContent({
partner_logo,
image,
});
Комментарии:
1. пожалуйста, посмотрите правку, я пытаюсь заполнить содержимое с помощью этого, мне все еще нужно указывать имена свойств?
2. @Altair21 — Боюсь, я не понимаю правку; код может сделать ее более понятной. По сути, не имеет значения, что вы делаете с объектом, вам нужно создать его с допустимым синтаксисом.
{ person.name, person.class }
не является допустимым инициализатором объекта, но{ name: person.name, class: person.class }
и{ name, class }
(если вы используете решение для деструктурирования) являются.3. О, спасибо за разъяснение
4. @Altair21 — Я сделал это в первом предложении ответа, но, возможно, недостаточно четко; Я расширил этот первый абзац.
5. Спасибо за информацию. это многое объясняет для меня
Ответ №2:
Синтаксис сокращенных объектов не работает, потому что в именах ключей есть точки.
Вы можете изменить его на что-то вроде:
import { result } from "./partnership_rewards_response.json";
result.map((partner,index)=>{
const obj = {
partnerName: partner.name,
partnerClass: partner.class
}
})
Комментарии:
1. пожалуйста, посмотрите правку, я пытаюсь заполнить содержимое с помощью этого, мне все еще нужно указывать имена свойств?
2. Можете ли вы показать код, определяющий структуру объекта?
3. Пожалуйста, ознакомьтесь с правкой
4. Затем инициализируйте свой объект как
{ partner_name: partner.name, etc
. Но я не вижу здесь partner_class.5. это был просто пример, я не следил за точными названиями свойств, но я сделаю это, спасибо
Ответ №3:
ваш синтаксис стенографии неверен измените свой код на этот
result.map((partner,index) => {
const obj = {
name : partner.name,
class : partner.class
}
})
Это должно сработать