javascript - 尽管 if (应该充当过滤器),但所有元素都推入数组
问题描述
我的 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)
然后它会识别重复元素并提醒它们,但也会将它们推入。
解决方案
那么,如何使用 for 循环遍历所有保留并检查它是否在数组中。开始时,您的数组将为空,因此将添加第一个预订。下一个将检查当前的预留数组,如果它存在,则不要添加到它。有很多方法可以检查它是否存在于数组中。这里有一些例子来展示这些方法:
var num_array = [1, 2, 3, 4, 4]
var string_Array = ["a", "b", "c", "a", "b", "c"]
var obj_array = [ { index: 1, value: "a" }, { index: 2, value: "b" }, { index: 2, value: "b" } ]
var num_ourArray = [];
var string_ourArray = [];
var obj_ourArray = [];
//loop through number array
$.each(num_array, function(k, v){
//first way to check
if ($.inArray(v, num_ourArray) == -1) //so if it's NOT in the array
{
num_ourArray.push(v)
}
//second way to check
/*if (num_ourArray.indexOf(v) == -1) //so if it's NOT in the array
{
num_ourArray.push(v)
}*/
})
console.log(num_ourArray)
//loop through string array
$.each(string_Array, function(k, v){
//first way to check
if ($.inArray(v, string_ourArray) == -1) //so if it's NOT in the array
{
string_ourArray.push(v)
}
})
console.log(string_ourArray)
//loop through object array
$.each(obj_array, function(k, v){
//first way to check
if (!obj_ourArray.some(item => item.index === v.index)) //so if it's NOT in the array
{
obj_ourArray.push(v)
}
})
console.log(obj_ourArray)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
推荐阅读
- filebeat - 如何使用 filebeat 处理重叠日志?
- apache-spark - org.apache.spark.SparkException:无法初始化类 com.google.cloud.spark.bigquery.SparkBigQueryConnectorUserAgentProvider
- kubernetes - 如何在属于另一个命名空间的部署 yaml 中指定 serviceAccount(在默认命名空间中创建)
- c++ - Windows C/C++SOCKET 编程:在 2 个独立进程之间共享套接字
- c# - 如何将引用程序集的引用添加到项目中
- powerbi - 没有完全匹配的查找表(找到大于的第一个值)
- qml - 一个函数说它需要 -const QString &program- 作为参数,我应该输入什么?
- dataset - 是否可以将具有不同观察次数的两个数据集添加在一起?
- java - 使用 ORDER BY 查询以对端点中的值进行排序
- java - java.text.ParseException:无法解析的日期:“2/9/2016 10:30:00 AM (GMT-05:00) 东部时间(美国和加拿大)”