为什么这不起作用?过滤数据

时间:2015-12-01 16:29:45

标签: javascript jquery

我正在尝试将3个输入与一组数据进行匹配。只有当所有三个符合标准时,它才会将所有这三个标准添加到结果中。这些将在稍后显示。为简单起见,我将数据集缩短为一个对象。谢谢!

var departureDate = $("#departure-date").val();
var returnDate = $("#return-date").val();
var city = $("#city").val();

var places = [{
  place: "New York City",
  avalibleArival: ["3 December, 2015", "4 December, 2015"],
  avalibleReturn: ["4 December, 2015", "6 December, 2015"]
}];

var results = [];
places.forEach(function (x) {
  if (x.place === city) {
    console.log("found city");
    places.forEach(function (y) {
      if (y.avalibleArival === departureDate) {
        console.log("Found correct Departure Date");
        places.forEach(function (z) {
          if (z.avalibleReturn === returnDate) {
            console.log("yay you found a Full match");
            results.push([x, y, z]);
          }
        });
      }
    });
  }
});

1 个答案:

答案 0 :(得分:2)

您的代码有两个主要问题,一个停止工作另一个只是不必要

  1. 在代码if (z.avalibleReturn === returnDate) {avalibleArival的类似内容中,您将字符串与数组进行比较,这将永远不会等同于

  2. 您正在places数组的每个循环内循环遍历places数组 - 这不仅是不必要的,而且非常低效。你不需要这样做。

  3. 我认为你所追求的是

    places.forEach(function (x) {
      if (x.place === city) {
        console.log("found city");
        if(x.avalibleArival.indexOf(departureDate) > -1){
            console.log("Found correct Departure Date");
            if(x.avalibleReturn .indexOf(returnDate) > -1){
                console.log("yay you found a Full match");
                results.push([x, y, z]);
            }    
        }    
      }
    });