一次将多个对象传递给函数参数

时间:2015-03-10 03:45:56

标签: javascript function object properties callback

我正在编写一个程序(用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);

我收到了我想要的输出,但我的代码看起来有点矫枉过正吗? 谢谢!

1 个答案:

答案 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函数来过滤它们。