调用其他函数的函数我很困惑

时间:2019-10-15 06:34:41

标签: javascript function invoke repl.it

这里是第一次海报,在我11月份参加的为期6个月的全栈训练营的准备工作中,我遇到了减速。

我正在repl.it上进行一些练习,而这是关于javascript函数的。系统会告诉您编写3个函数,分别是代餐,切片和烹饪。

系统会为您提供一个空数组,并告知您将其填充为如下对象:

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”),并且类似他们要“类型”:“蔬菜”的切片函数,他们想要“((食品):价值)切片”(例如“秋葵切片”)。

然后,饭食者功能将这些功能吐出的内容并创建一个数组,例如:[“煮熟的牛肉”,“秋葵切片” ...]。

我卡住的地方是我写了一个.filter()函数,该函数只返回那些对象的过滤后的数组,我很快意识到这些对象无法满足其目的。我想我想弄清楚如何编写函数,以便可以分别过滤肉类和蔬菜,然后将它们吐出所需的字符串。

让我感到困惑的是,如何使用“ type”值进行过滤后,如何定位“ food”值并将其插入到特定字符串中。

这是我到目前为止编写的其余代码,可能有帮助也可能没有帮助。

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 个答案:

答案 0 :(得分:1)

您没有按照他们的要求去做。 他们想要一个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)

答案 1 :(得分:0)

我认为仅需要这些行:

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);

请注意用于编写函数的粗箭头语法。 here on Mozilla说明了它与常规功能的不同之处。

答案 2 :(得分:0)

欢迎holdenprkr!

我认为您步入正轨!目前,我们有一种方法来获取一系列的蔬菜和另一种用于肉类的食物:

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


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

到目前为止,我们现在想要一个 cook函数,该函数采用我们的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', ...]
}

因此,如果我们将其结合到 mealMaker函数中,我们现在可以:

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 slice 留空,您可以从user753642的回答中得到启发;)