我正在尝试将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]);
}
});
}
});
}
});
答案 0 :(得分:2)
您的代码有两个主要问题,一个停止工作另一个只是不必要
在代码if (z.avalibleReturn === returnDate) {
和avalibleArival
的类似内容中,您将字符串与数组进行比较,这将永远不会等同于
您正在places
数组的每个循环内循环遍历places
数组 - 这不仅是不必要的,而且非常低效。你不需要这样做。
我认为你所追求的是
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]);
}
}
}
});