Функции Вызов других функций - PullRequest
0 голосов
/ 15 октября 2019

Первый постер здесь, и он натолкнулся на ускорение в моей предварительной работе для 6-месячного загрузочного лагеря с полным стеком, в который я записался в ноябре.

Я работаю над некоторыми упражнениями на repl.it, а это на функциях JavaScript. Вам сказали написать 3 функции под названием foodMaker, slice и cook.

Вам дан пустой массив и сказано заполнить его такими объектами:

const arrayOfFoodObjects = [
  {
   "food": "beef",
   "type": "meat"
  },
  {
   "food": "zucchini",
   "type": "vegetable"
  },
  {
   "food": "bacon",
   "type": "meat"
  },
  {
   "food": "okra",
   "type": "vegetable"
  }
];

Онивы хотите, чтобы функция cook взяла все объекты, которые имеют "type": "meat", и вернула строку с надписью "Cooked (" food ": value)" (например, "Cooked beef") и аналогично с функцией slice для"type": "vegetable" они хотят "(" food ": value) ломтики" (например, "Okra ломтики").

Затем функция foodMaker берет то, что выплевывают эти функции, и создает массив следующим образом: ["Cooked beef", "Okra slices" ...].

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

Что меня смущает, так это как настроить таргетинг на «еду»значение и вставьте его в определенную строку после фильтрации со значением типа.

Это остальная часть кода, который я написал до сих пор, который может или не может помочь.

var redMeat = arrayOfFoodObjects.filter(function(cook) {
      return cook.type == "meat";
});


var veggies = arrayOfFoodObjects.filter(function(slice) {
      return slice.type == "vegetable";
});

console.log(veggies, redMeat)

С консолью, которая выглядит примерно так:

[ { food: 'zucchini', type: 'vegetable' },
  { food: 'okra', type: 'vegetable' } ] [ { food: 'beef', type: 'meat' },
  { food: 'bacon', type: 'meat' } ]

Я, наверное, не занимаюсь этим правильно, потому что я потратил много времени, пробуя разные вещи, которые у меня былинашел в Google и применил их как мог, но это было самое близкое, что мне удалось получить. Спасибо за любую помощь, спасибо.

PS Я не очень знаком с этим форматом функции, так как я придумал это через некоторые поиски в Google. Если бы кто-то не возражал объяснить, чем это может отличаться от формата функций, который я привык видеть, это было бы здорово. Я не уверен, какая часть является «именем» функции. Функции, с которыми я работал до сих пор, обычно выглядят так:

function nameOfFunction(value(s)) {
     *action*;
}

Ответы [ 3 ]

1 голос
/ 15 октября 2019

Вы не делаете то, что они просят. Они хотят функцию cook и функцию slice:

function cook(arr){
    //for each element of the array, return its mapped value (they ask a string)
    return arr.map( function(foodObject){
        return `Cooked ${foodObject.food}`
    })
}
function slice(arr){
    //do it
}
let cooks = cook(arrayOfFoodObjects)
let slices = slice(arrayOfFoodObjects)

, а затем передать то, что выплеснула функция, на mealMaker (в соответствии с инструкциями):

function mealMaker(cooks, slices){
    return cooks.map( function(cook, idxCook){
        let slice = slices[idxCook];
        //guess what to do with cook and slice
    })
}
mealMaker(cooks, slices)
0 голосов
/ 15 октября 2019

Добро пожаловать holdenprkr!

Я думаю, вы на правильном пути! На данный момент у нас есть способ получить массив овощей и еще один для мяса:

var redMeat = arrayOfFoodObjects.filter(function(cook) {
    return cook.type == "meat";
});


var veggies = arrayOfFoodObjects.filter(function(slice) {
    return slice.type == "vegetable";
});

Пока все хорошо, теперь мы хотим функция приготовления который берет наш readMeat массив и преобразует его в массив строк . Итак, что-то в строках:

function cook(readMeatsArray) {
    // convert readMeatsArray to cookedMeatsArray
    // [{'food': 'beef', 'type': 'meat'}, ...]
    // to
    // ['Cooked beef', ...]
}

А затем функция среза для овощей:

function slice(veggiesArray) {
    // convert veggiesArray to slicedVeggiesArray
    // [{'food': 'okra', 'type': 'vegetable'}, ...]
    // to
    // ['Okra slices', ...]
}

Итак, если мы объединим это в функция foodMaker теперь у нас есть:

function mealMaker() {
    // First we get our arrays
    var redMeat = arrayOfFoodObjects.filter(function(cook) {
         return cook.type == "meat";
    });

    var veggies = arrayOfFoodObjects.filter(function(slice) {
        return slice.type == "vegetable";
    });

    // Then we convert our object arrays to string arrays
    var cookedMeats = cook(redMeat);
    var slicedVeggies = slice(veggies);

    // Now we combine the resulting arrays and return it
    var mealArray = cookedMeats.concat(slicedVeggies);

    return mealArray;
}

Это будет один из подходов, надеюсь, это поможет.

PD: я оставил функции cook и ломтик пусто специально, вы можете получить вдохновение из ответа пользователя 753642;)

0 голосов
/ 15 октября 2019

Я думаю, что что-то отдельно эти строки запрашиваются:

const cook = product => "cooked " + product.food;
const slice = product => product.food + " slices";

const mealMaker = (products) => {
  const meatProducts = products.filter(product => product.type === "meat");
  const veggieProducts = products.filter(product => product.type === "vegetable");
  return [
    ...cook(meatProducts),
    ...slice(veggieProducts)
  ];
}

mealMaker(arrayOfFoodObjects);

Обратите внимание на синтаксис жирной стрелки для написания функций. Чем он отличается от обычных функций, объясняется здесь в Mozilla .

...