这里是第一次海报,在我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*;
}
答案 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的回答中得到启发;)