JavaScript: Получите имя clearname, если оно имеет фиксированную ставку в одном поле

#javascript #axios

Вопрос:

У меня есть следующий JSON:

 [{
  id: 8,
  technical_name: "netflix",
  short_name: "nfx",
  clear_name: "Netflix",
  priority: 10,
  display_priority: 1,
  monetization_types: [ "flatrate" ],
}, {
  id: 9,
  technical_name: "gas",
  short_name: "gsx",
  clear_name: "Gas",
  priority: 10,
  display_priority: 1,
  monetization_types: [ "flatrate" ],
}, {
  id: 10,
  technical_name: "FOM",
  short_name: "Fom",
  clear_name: "Gas",
  priority: 10,
  display_priority: 1,
  monetization_types: [ "sax" ],
}]
 

Используя axios, я пытаюсь получить все «clear_name», если у элемента есть «flatrate» в его «типах монетизации».
А потом утешить.запишите его на экран.

Пока что вот мой код:

 async function makeGetRequest() {
  let res = await axios.get("http://apis.makersla.com/content/providers/locale/it_IT");

  let data = res.data;
  jData = data.forEach((item) =>
    item.monetization_types.includes("flatrate") ? item.clear_name : ""
  );
  console.log(jData);
}

makeGetRequest();
 

Но это не работает. Есть идеи, как я могу этого достичь? Я просто хочу, чтобы консоль регистрировала чистое имя.

Комментарии:

1. .forEach() ничего не возвращает. Вы хотите .reduce() или .filter() .map() или создать jData массив и .push() clear_name при необходимости в него (предположение: вы не хотите, чтобы в результате была куча пустых строк)

2. Так как же именно я могу это сделать? И спасибо вам за большие пальцы, ребята

Ответ №1:

Фильтр и карта:

 const data = [{ id: 8, technical_name: "netflix", short_name: "nfx", clear_name: "Netflix", priority: 10, display_priority: 1, monetization_types: [ "flatrate" ], }, { id: 9, technical_name: "gas", short_name: "gsx", clear_name: "Gas", priority: 10, display_priority: 1, monetization_types: [ "flatrate" ], }, { id: 10, technical_name: "FOM", short_name: "Fom", clear_name: "Gas", priority: 10, display_priority: 1, monetization_types: [ "sax" ], }];

const names = data
  .filter(({monetization_types}) => monetization_types amp;amp; Array.isArray(monetization_types) amp;amp; monetization_types.includes("flatrate"))
  .map(({clear_name}) => clear_name);

console.log(names) 

Комментарии:

1. script.js:6 Uncaught (in promise) TypeError: Cannot read property 'includes' of null at script.js:6 at Array.filter (<anonymous>)

2. Не с объектом, который вы разместили в своем вопросе

3. Таким образом, либо вы не получаете массив во всех случаях, ЛИБО ваша реализация JS не поддерживает массив.включает