这是我第一次在这里发布帖子,我在11月参加了一个为期6个月的全栈新兵训练营,但在准备工作时遇到了障碍。
我正在做一些关于repl.it的练习,这一个是关于javascript函数的。您需要编写3个函数,分别称为mealMaker、slice和cook.
你得到了一个空数组,并被告知用如下所示的对象填充它:
const arrayOfFoodObjects = [
{
"food": "beef",
"type": "meat"
},
{
"food": "zucchini",
"type": "vegetable"
},
{
"food": "bacon",
"type": "meat"
},
{
"food": "okra",
"type": "vegetable"
}
];他们希望您让Cooked函数获取所有具有"type":“肉”的对象,并返回一个字符串,该字符串表示“已煮熟的(”食物“:值)”(例如“煮熟的牛肉”)和类似的切片函数“类型”:“蔬菜”他们想要“(”食物“:价值)切片”(例如"Okra切片“)。
然后,mealMaker函数获取这些函数输出的内容并创建一个数组,如下所示:“熟牛肉”,"Okra slices“……
我陷入困境的地方是,我编写了一个.filter()函数,它只返回那些对象的过滤数组,我很快意识到这些对象并不能达到它的目的。我猜我正在试图弄清楚如何编写一个函数,这样我就可以分别过滤肉类和蔬菜,然后让它们输出所需的字符串。
让我迷惑不解的是,在使用"type“值过滤之后,如何定位”食物“值并将其插入到某个字符串中。
这是我到目前为止所写的其余代码,可能会有帮助,也可能没有帮助。
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上找到的不同的东西,并尽可能地应用它们,但这是我设法获得的最接近的东西。非常感谢您的帮助,谢谢。
另外,我不是非常熟悉这种格式的函数,因为我是通过在谷歌上搜索得出这个格式的。如果有人不介意解释这可能与我习惯看到的函数格式有何不同,那就太棒了。我不确定它的哪一部分是函数的“名称”。到目前为止,我使用的函数通常如下所示:
function nameOfFunction(value(s)) {
*action*;
}发布于 2019-10-15 15:07:02
你没有按他们的要求去做。他们想要一个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)发布于 2019-10-15 15:17:18
我认为这几行中的某些内容是需要的:
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解释了它与常规函数的不同之处。
发布于 2019-10-15 15:53:02
欢迎使用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', ...]
}因此,如果我们在一个mealMaker function中组合它,我们现在有:
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的回答中得到一些启发;)
https://stackoverflow.com/questions/58388534
复制相似问题