Javascript 使用for循环和if语句检查两个数组
我正在尝试对两个数组(一个有4个对象,一个只有几个字符串)运行一个检查,其中有for循环和if语句用于一个问题集 其思想是使用for循环迭代对象数组和字符串数组中的每个元素,然后使用if语句找出匹配项,并将匹配的字符串推到新数组中。迭代所有元素后,如果存在匹配的字符串,则返回该字符串 问题在于,一旦在对象数组中找到一个匹配项,函数每天调用它,并只返回该匹配项,而不是迭代对象数组中的其余元素Javascript 使用for循环和if语句检查两个数组,javascript,arrays,if-statement,for-loop,Javascript,Arrays,If Statement,For Loop,我正在尝试对两个数组(一个有4个对象,一个只有几个字符串)运行一个检查,其中有for循环和if语句用于一个问题集 其思想是使用for循环迭代对象数组和字符串数组中的每个元素,然后使用if语句找出匹配项,并将匹配的字符串推到新数组中。迭代所有元素后,如果存在匹配的字符串,则返回该字符串 问题在于,一旦在对象数组中找到一个匹配项,函数每天调用它,并只返回该匹配项,而不是迭代对象数组中的其余元素 var乘客=[ {姓名:[“迈克尔·杰克逊”],付费:true}, {name:[“Osama”],pa
var乘客=[
{姓名:[“迈克尔·杰克逊”],付费:true},
{name:[“Osama”],paid:false},
{name:[“Harambe”],paid:true},
{name:[“Pepe”],paid:true},
];
var noFlyList=[“吉米”、“约翰”、“佩佩”、“奥萨马”];
功能检查禁飞(乘客、禁飞名单){
对于(变量i=0;i<0.length;i++){
对于(var j=0;j }
使用以下命令:让循环中的passengerList在每个循环上重新初始化为空数组,并且在循环中返回passengerList会在完成第一个循环后使循环中断
function checkNoFly(passengers, noFlyList) {
var passengerList = [];
for (var i = 0; i < passengers.length; i++) {
for (var j = 0; j < noFlyList.length; j++) {
if (passengers[i].name[0] == noFlyList[j]) {
passengerList.push(passengers[i].name[0]);
}
}
}
return passengerList;
}
编辑2:对于您更新的问题,由于在第一次检查中,我们将返回单个函数processPassenger()
的数组进行验证,因此我们可以对checkNotPaid
函数采取类似的方法,为尚未付款的用户返回数组
function checkNotPaid(passengers) {
var passengerNotPaid = [];
for (var i = 0; i < passengers.length; i++) {
if (!passengers[i].paid) {
passengerNotPaid.push(passengers[i].name[0]);
}
}
return passengerNotPaid;
}
功能检查未付款(乘客){
var passengerNotPaid=[];
对于(变量i=0;i<0.length;i++){
如果(!乘客[i].已付){
passengerNotPaid.push(乘客[i].name[0]);
}
}
未付回程费;
}
除非您想重构所有内容,否则我认为这是可以的。您告诉它这样做:
返回passengerList代码>在您的内部循环中。另外,您不断地重新声明变量var passengerList=[]代码>在内部for循环中,每次清空它
var乘客=[
{姓名:[“迈克尔·杰克逊”],付费:true},
{name:[“Osama”],paid:false},
{name:[“Harambe”],paid:true},
{name:[“Pepe”],paid:true},
];
var noFlyList=[“吉米”、“约翰”、“佩佩”、“奥萨马”];
功能检查禁飞(乘客、禁飞名单){
var passengerList=[];
对于(变量i=0;i<0.length;i++){
对于(var j=0;j log(canWeFly?“我们能飞”:“我们不能飞”)代码>爱死它了,在这篇文章发布3秒后,我已经投了反对票,你告诉它这样做:返回passengerList
@connexo,是的,但是在if语句检查完整个事件中的匹配之后,我确实希望返回数组,这样我就可以在end@connexo有没有办法让passengerList作为我的checknofly函数的结果,而不在一次迭代中结束for循环,您不断地重新声明变量var passengerList=[]代码>在内部for循环中,每次都清空它。如果passengerlist中没有任何内容,会发生什么?函数将返回null还是false?它将返回您定义的内容:[]
,一个空数组。由于它返回的是passengerList的空数组,您可以检查它的长度!但有了这个,所有的报酬还能用吗?因为allpaid返回的东西肯定不会是arrayOh,allpaid函数是给我的,我真的不知道wtf return(!passengers.paid)是什么意思,理论上这应该行得通,但是当我在noFlyList中没有人的情况下尝试时,console.log仍然打印,只是在checkNoFlyMy bad的地方有一个空白,我假设一个空数组将计算为falsy。由于没有,请改为检查数组长度。更新了返回行。对不起,我是js的初学者,问号是什么意思?returna?b:c
与if(a==true){return b;}else{return c;}
相同。它被称为三元表达式。如果数组为空,则没有人在禁飞列表中,因此函数checkNoFly应返回false,以便processPassenger可以返回true,然后console.log将不会打印
function checkNotPaid(passengers) {
var passengerNotPaid = [];
for (var i = 0; i < passengers.length; i++) {
if (!passengers[i].paid) {
passengerNotPaid.push(passengers[i].name[0]);
}
}
return passengerNotPaid;
}