我正在编写一个程序(用JavaScript),它将根据用户的需求确定最合适的汽车。我有4个物体,每个物体都是不同的车。为简化起见,我将提供一个对象作为示例。假设我的代码中有3个具有相同属性的其他对象(菲亚特,奥迪,宝马等)。
var chevy = {
make: "Chevy",
model: "Bel Air",
year: 1957,
color: "red",
passengers: 2,
convertible: false,
mileage: 1021
};
目标是将每个对象作为参数传递给函数,并根据条件返回一个布尔值。这是功能:
function prequal(car) {
if (car.mileage > 10000) {
return false;
}
else if (car.year > 1960) {
return false;
}
else {
return true;
}
}
调用函数:
var worthALook = prequal(taxi);
if (worthALook) {
console.log("You gotta check out this " + taxi.make + " " + taxi.model);
}
else {
console.log("You should really pass on the " + taxi.make + " " + taxi.model);
}
我是否必须单独调用每个对象?或者是否有一种简单的方法可以同时调用所有4个对象的函数?我是新手,解决这个问题激起了我的好奇心。
谢谢!
编辑:对不起漫无目的,但我似乎找到了解决办法。我通过使用嵌套函数获得所需的输出:function worthALook(car) {
var shouldYouBuy = prequal(car);
if (shouldYouBuy) {
console.log("You gotta check out this " + car.model);
}
else {
console.log("You should really pass on this " + car.model);
}
}
在'worthALook'函数内调用原始'prequal'函数(见上文)输出:
You should really pass on this Taxi
You should really pass on this Cadillac
You gotta check out this Bel Air
You should really pass on this 500
在每个对象之后,我调用了值得这样的函数:
worthALook(chevy);
worthALook(fiat);
等
我收到了我想要的输出,但我的代码看起来有点矫枉过正吗? 谢谢!
答案 0 :(得分:0)
您可以将对象放在Array
中并过滤值得一看的内容。返回该对象而不是布尔值。
function worthALook(){
return ([].filter.call(arguments, prequal) || [false])[0];
/* remove [0] from the above line and change [false] to false if you
want to return multiple cars that satisfy a condition. Use indexes if you do that */
}
var car = worthALook(chevy, fiat, audi, bmw); // pass inas many as you want
if(car) // check if it's a car
console.log("You gotta check out this " + taxi.make + " " + taxi.model);
return语句与||
一起使用,因此即使没有一辆车满足条件,你也可以返回false
。此外,我们正在使用arguments
对象,因此您可以将尽可能多的car
个对象传递给worthALook
函数,该函数将使用prequal
函数来过滤它们。