Объяснено
В этом примере вы можете видеть, что я предоставил решение в двух частях, одна из которых представляет собой простой способ простого доступа к 'x'
ингредиенту из множества блюд, а затем другое решение, котороебудет перебирать массив блюд, распечатывая каждый отдельный ингредиент.
Как я уже говорил в моем решении, вы можете использовать forEach
или, альтернативно, вы также можете использовать такие функции, как map
или reduce
, если хотите.В случае, когда вы не знаете, когда использовать какое из них, базовое эмпирическое правило означает, что вы будете использовать map
или reduce
, если хотите следовать принципам функционального программирования.forEach
решение позволяет побочные эффекты происходить более легко, и т.д ... Я имею в виду это спорно в определенной степени, но это основная идея в любом случае ...
1015 * Редактировать 1017 *Я включил простую функцию журнала для этой демонстрации, если коротко, когда вы запускаете этот фрагмент кода, лично я нахожу отвратительным то, как мало места предоставляется для окна консоли, поэтому регистрируйте одну вещь за раз после некоторой задержки иочистите консоль тоже.
let delay = 0;
const DELAY_INC = 1500;
// Just for this demo, have the ability to log something,
// after a delay and clear the console.
const log = (arg, alrt) => {
setTimeout(() => {
console.clear();
console.log(arg);
if (alrt != null) {
alert(alrt);
}
}, delay);
delay += DELAY_INC;
};
// Your data.
var data = {
"meals": [{
strIngredient1: 'lemons',
strIngredient2: 'paprika',
strIngredient3: 'red onions',
strIngredient4: 'chicken thighs',
strIngredient5: 'vegetable oil',
strMeasure1: '2 Juice',
strMeasure2: '4 tsp',
strMeasure3: '2 finely chopped',
strMeasure4: '16 skinnless',
strMeasure5: ''
}]
};
// Just some demo.
var meals = data.meals;
var meal = meals[0];
var ingredient = meal.strIngredient1;
log(data); // Log the raw data.
log(meals); // Log the array of meals.
log(meal); // Log a specific meal.
log(ingredient); // Log a specific ingredient.
// If you wish to iterate, log each ingredient for each meal.
data.meals.forEach(meal => Object.keys(meal).forEach(key => log(meal[key])));
// Here's a solution.
const newArray = data.meals.reduce((array, meal) => {
// Rather than iterate over ALL of the keys, just
// do this, basically 50% of the keys.
const subArray = Object.keys(meal).filter(key => key.indexOf('strIngredient' == -1));
// Basically add some ojects to the array.
subArray.forEach(key => {
const int = key.replace(/\D/g, '');
const measureKey = `strMeasure${int}`;
const ingredientKey = `strIngredient${int}`;
const obj = {
ingredient: meal[ingredientKey],
measure: meal[measureKey]
};
array.push(obj);
});
// Make sure to return the array.
return array;
}, []);
// Now just print the resuts, and make sure that you know
// and alert that the app has finished.
log(newArray, 'FINISHED');