Цикл для каждого x-объекта в JSON-массиве - PullRequest
1 голос
/ 29 октября 2019

Я работаю над этим небольшим проектом (расширением), где я получаю данные из массива JSON с rapidapi, я могу получить данные. Но я неясен и нов, чтобы понять, как выполнить цикл по всему набору данных (который в конечном итоге я бы попытался сохранить в локальном хранилище, но это не имеет значения для понимания)

конкретные: Я хочуциклически перебирать весь массив и показывать каждый 1-элементный объект каждого второго массива во всем массиве.

пример массива JSON

0:{4 items
"kanji":{6 items
"character":"一"  ----> this one
"meaning":{...}1 item
"strokes":{...}3 items
"onyomi":{...}2 items
"kunyomi":{...}2 items
"video":{...}3 items
}
"radical":{...}7 items
"references":{...}3 items
"examples":[...]9 items
}
1:{4 items
"kanji":{6 items
"character":"飼"  ----> or this one
"meaning":{...}1 item
"strokes":{...}3 items
"onyomi":{...}2 items
"kunyomi":{...}2 items
"video":{...}3 items
}
"radical":{...}7 items
"references":{...}3 items
"examples":[...]6 items
}

И так одно.

Я пытался получить массив JSON и показать его объект. Затем я попытался изменить число [1] на переменную. Но там я застрял. Я не могу понять, как создать генератор случайных чисел, который выбирает каждый 1-й объект массива, как показано в массиве json выше.

var myfetch = fetch("https://kanjialive-api.p.rapidapi.com/api/public/kanji/all", {
  "method": "GET",
  "headers": {
    "x-rapidapi-host": "x",
    "x-rapidapi-key": "x"
  }
})

/** Parse response object
 * returns object parsed from json
 */
const getJsonFromRes = (res) => res.json();

/**  Logs some data. 
 * returns undefined
 */
//const logData = (data) => console.log(data[1].kanji.character);

/** Ignores its data parameter. Attempts to set an element to an uninitialized variable.
 */
const accessKanji = (data) => document.getElementById('kanji').innerHTML = data[1].kanji.character;

for (i in accessKanji()) {
  x += data[i].kanji.character + "<br>";
}

// print error to console. returns undefined.
const logError = (err) => console.log(err);

myfetch
  .then(getJsonFromRes)
  //.then(logData) 
  .then(accessKanji)
  .catch(logError);

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

Любое руководство или ссылка на учебники по этому вопросу, которые хорошо работают, очень ценится !! Или пример, конечно, будет идеальным.

1 Ответ

2 голосов
/ 29 октября 2019

accessKanji() не возвращает объект, который был выбран. У вас также есть цикл for на верхнем уровне, вызывающий accessKanji() до выполнения fetch() и без передачи ему каких-либо данных.

Вам необходимо поместить этот цикл в саму функцию accessKanji().

const accessKanji = (data) => {
  let chars = data.map(el => el.kanji.character + "<br>").join("");
  document.getElementById('kanji').innerHTML = chars;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...