【发布时间】:2021-10-10 09:21:23
【问题描述】:
我的 HTML 中有一个小表单,用于获取预订数据。对应的提交按钮与一个函数(saveReserve)相关联。这个想法是该函数可以获取数据并将其推送到数组中,但还可以检测何时已经进行了类似的预订,因此如果是这种情况,则将新的保留排除在外(不要将其推送到数组中)与相似的那个)。
问题是所有保留都是推送,即使它们是相同的,忽略 IF 元素:
let allReservation = [];
var NR = 0
const saveReserve = () => {
var date= $("#date").val(); //These are the form inputs//
var hour= $("#hour").val();
var gameRes = $("#reserveG").val();
NR++
var reservation = ({date, hour, gameRes})
let exist = allReservation.find(e=> e.date == reservation.date && e.hour == reservation.hour && e.gameRes == reservation.gameRes);
console.log(reservation, exist)
if (exist == undefined) {
allReservation.push( NR + ": " + $("#nameR").val() + Object.values(reservation) );
alert ("All good")
}else{
alert ("Invalid, try again")
}
//nameR is the name input in the form//
console.log (allReservation)
$("input").val('')
}
$('[type="submit"]').click(saveReserve)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="date" value="2021-08-05" id="date" />
<input type="number" id="hour" min="0" max="23" value="7" />
<input type="text" id="reserveG" value="A" />
<input type="text" id="nameR" value="B" />
<input type="submit" />
let allReservation = [];
var NR = 0
const saveReserve = () => {
var date= $("#date").val(); //These are the form inputs//
var hour= $("#hour").val();
var gameRes = $("#reserveG").val();
NR++
var reservation = ({date, hour, gameRes})
let exist = allReservation.find(e=> e.date == reservation.date && e.hour == reservation.hour && e.gameRes == reservation.gameRes);
if (exist == undefined) {
allReservation.push( NR + ": " + $("#nameR").val() + Object.values(reservation) ),
alert ("All good") )
}else{
alert ("Invalid, try again")
}
//nameR is the name input in the form//
console.log (allReservation)
$("input").val('')
}
.find 起作用的唯一方法是在函数末尾添加:
allReservation.push (reservation)
然后它会识别出重复的元素并提醒它们,但也会将它们推入。
【问题讨论】:
-
到底是什么问题?
-
.find() 检测与表单中的输入具有相同数据的预订何时已在数组中。这个想法是,当它发生时,匹配的新保留将被忽略并且不会被推送到同一个数组中,但它不起作用。最后我有一个带有重复信息的数组
-
reservation是这样的对象:{ date: "2021-08-05", hour: "7", gameRes: "A" },而将这样的字符串推送到allReservations数组:"1: B2021-08-05,7,A"。当然,这没有可比性 -
你认为你做。但是
array.find()中的reservation显然是上一行中声明的对象。否则,你不能在代码后面做Object.values()。 -
我现在明白你的意思了,谢谢!问题是我不想比较输入中输入的所有信息,只是这三个部分。名称和 NR 可以相同,但日期、时间和比赛不能相同。我看到这样做,我最终做了两个不同的事情,再次感谢。
标签: javascript jquery arrays if-statement