Получить объект массива в массиве в javascript

Я ищу способ увеличения числа, поэтому мне нужно сначала найти объект, который определяется идентификатором. В частности, я хочу увеличить количество голосов за конкретный объект.

Структура данных выглядит так:

const polls = [
  {
    id: "9efd91dc-b762-11e8-bfb8-c471feb11e42",
    owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
    question: "How are you? 1536849484",
    tenement: "0cec2fc2-b697-11e8-8a0f-c471feb11e42",
    participation: 0,
    poll_answer_options: [
      {
        id: "9efd9b32-b762-11e8-bfb8-c471feb11e42",
        owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
        answer_text: "Not so Fine",
        votes: 0
      },
      {
        id: "9efd97b8-b762-11e8-bfb8-c471feb11e42",
        owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
        answer_text: "Fine",
        votes: 0 // -> want to increment
      }
    ]
  },
  {
    id: "13b43584-b697-11e8-b2c2-c471feb11e42",
    owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
    question: "How are you? 1536762062",
    tenement: "0cec2fc2-b697-11e8-8a0f-c471feb11e42",
    participation: 1,
    poll_answer_options: [
      {
        id: "13b43f66-b697-11e8-b2c2-c471feb11e42",
        owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
        answer_text: "Not so Fine",
        votes: 1
      },
      {
        id: "13b43bd8-b697-11e8-b2c2-c471feb11e42",
        owner: "d926e95c-b696-11e8-8a0f-c471feb11e42",
        answer_text: "Fine",
        votes: 0
      }
    ]
  }
];

Я пробовал использовать метод поиска JavaScript, как показано ниже, но это не сработало.

let pollAnswerOptions = polls.find(
    poll => poll.poll_answer_options.id === "9efd97b8-b762-11e8-bfb8-c471feb11e42"
  );

poll_answer_options - это массив, а не объект

zfrisch 13.09.2018 20:13

Кажется, что оба ответа в каждом опросе имеют один и тот же идентификатор, поэтому неясно, как логически возможно настроить таргетинг на один из них.

Mitya 13.09.2018 20:15

@Utkanos, разыскивается только один id.

Nina Scholz 13.09.2018 20:20
0
3
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужен вложенный подход, и если вам нужно найти только один id, вы можете использовать короткое замыкание, чтобы предотвратить повторение.

const
    polls = [{ id: "9efd91dc-b762-11e8-bfb8-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", question: "How are you? 1536849484", tenement: "0cec2fc2-b697-11e8-8a0f-c471feb11e42", participation: 0, poll_answer_options: [{ id: "9efd9b32-b762-11e8-bfb8-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", answer_text: "Not so Fine", votes: 0 }, { id: "9efd97b8-b762-11e8-bfb8-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", answer_text: "Fine", votes: 0 }] }, { id: "13b43584-b697-11e8-b2c2-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", question: "How are you? 1536762062", tenement: "0cec2fc2-b697-11e8-8a0f-c471feb11e42", participation: 1, poll_answer_options: [{ id: "13b43f66-b697-11e8-b2c2-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", answer_text: "Not so Fine", votes: 1 }, { id: "13b43bd8-b697-11e8-b2c2-c471feb11e42", owner: "d926e95c-b696-11e8-8a0f-c471feb11e42", answer_text: "Fine", votes: 0 }] }],
    id = '9efd97b8-b762-11e8-bfb8-c471feb11e42';

polls.some(o => o.poll_answer_options.some(option => {
    if (option.id === id) {
        ++option.votes;
        return true;
    }
}));

console.log(polls);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Другие вопросы по теме