Javascript 在循环语法中定义循环条件数组/对象

Javascript 在循环语法中定义循环条件数组/对象,javascript,arrays,object,for-loop,conditional-statements,Javascript,Arrays,Object,For Loop,Conditional Statements,当我循环数组或对象时,我经常使用这种方式: var arrCars = ["opel" , "audi" , "volvo" , "volkswagen" , "renault" , "porsche" , "infinity" , "lexus"]; for (var i = 0, a; a = arrCars[i]; i++) { alert(a); } 在我看来,它给出了清晰的简短代码,而不是例如: for (var i = 0; i < ar

当我循环数组或对象时,我经常使用这种方式:

var arrCars = ["opel" , "audi" , "volvo" , "volkswagen" , 
              "renault" , "porsche" , "infinity" , "lexus"];

for (var i = 0, a; a = arrCars[i]; i++) {
  alert(a);
}

在我看来,它给出了清晰的简短代码,而不是例如:

for (var i = 0; i < arrCars.length; i++) {
  alert(arrCars[i]);
}
for(变量i=0;i
在本例中,这不是一个大问题,但当存在一些嵌套对象等时,它会给出很多代码


在这个问题下,您可以看到许多语法上的可能性。但我仍然无法找到如何通过数组的一部分进行循环。例如,如何使用首选语法仅循环前3个值。当然,我可以使用一个额外的条件语句,但我想知道如何在for语法本身中包含这个条件,比如:“for(var i=0;i<4;i++){}”,当然,如果可能的话。

出于我在评论中提到的原因,我不喜欢你的语法。但要回答这个问题:

for (var i = 0, a; i < 3 && (a = allCars[i]); i++)
for(var i=0,a;i<3&(a=allCars[i]);i++)

出于我在评论中提到的原因,我不喜欢你的语法。但要回答这个问题:

for (var i = 0, a; i < 3 && (a = allCars[i]); i++)
for(var i=0,a;i<3&(a=allCars[i]);i++)

你走在正确的轨道上

var myArray = ["0", "1", "2", "3", "4"];

for (var i = 0; i < 4; i++) {
alert(i);
}
var myArray=[“0”、“1”、“2”、“3”、“4”];
对于(变量i=0;i<4;i++){
警报(一);
}

这将为您的数组元素0-2(数组中的前3个)抛出一条警报消息。

您走对了方向

var myArray = ["0", "1", "2", "3", "4"];

for (var i = 0; i < 4; i++) {
alert(i);
}
var myArray=[“0”、“1”、“2”、“3”、“4”];
对于(变量i=0;i<4;i++){
警报(一);
}
这将为数组元素0-2(数组中的前3个)抛出一条警报消息

它不是很简洁,但我总是喜欢可读性而不是紧凑性。让迷你们负责压缩东西


它不是很简洁,但我总是喜欢可读性而不是紧凑性。让迷你们整理东西。

看了这些建议后,你想要的是:

for (var i = 0, a; (a = arrCars[i]) && i < 3; i++) {
    ...
}
for(var i=0,a;(a=arrCars[i])&&i<3;i++){
...
}
似乎除了第一个点之外,您不能将赋值放在任何其他位置(甚至连括号都不能解决这个问题),您需要在它周围加括号,以防止赋值到
arrCars[i]&&i<3


我同意其他意见,您最好不要让数组项的计算结果为
false

查看建议后,您需要的是:

for (var i = 0, a; (a = arrCars[i]) && i < 3; i++) {
    ...
}
for(var i=0,a;(a=arrCars[i])&&i<3;i++){
...
}
似乎除了第一个点之外,您不能将赋值放在任何其他位置(甚至连括号都不能解决这个问题),您需要在它周围加括号,以防止赋值到
arrCars[i]&&i<3



我同意其他评论,最好不要让数组项的计算结果为
false

我讨厌你喜欢的语法-在略读(仅我的观点:)时,扫一眼会让人困惑。如果数组可以包含
0
false
或空字符串,那么循环就无法工作。你的第二个循环根本不起作用,我想你忘了
I
@tymeJV也许我喜欢它,因为我经常在SQL中使用别名。对我来说,它是有序的。我讨厌你喜欢的语法-在浏览时看一眼(仅我的观点:)你的循环不工作,如果数组可以包含
0
false
,或者一个空字符串。你的第二个循环根本不起作用,我想你忘了
I
@tymeJV也许我喜欢它,因为我经常在SQL中使用别名。对我来说是有序的。谢谢,我忘了条件。嗯,我总是乐于接受改进建议;-)。它不起作用。Firebug说ReferenceError:左手边的赋值无效。添加了括号和小提琴来演示它。谢谢,我忘记了条件。嗯,我总是乐于接受改进建议;-)。它不起作用。Firebug说ReferenceError:左手边的赋值无效。添加了括号和提琴来证明这一点。只有在我尝试您的解决方案时,我才能得到正确的结果。@Dinizworld这就是我在不尝试的情况下从手机应答得到的结果!编辑。@tophyr,我已经朝着括号的方向思考了。我只是在这种情况下试过。在你编辑之后,它完全符合我的意思。谢谢我再次编辑以修复“false”元素问题,并对整行代码的丑陋程度做了一些评论:)我个人更喜欢手动将
a
赋值与
for
循环逻辑分开,尽管我确实发现您在OP中的语法很有趣(即使这会让这种特殊情况变得很痛苦)。如果数组短于3个元素,则第一个循环不起作用,它将使用
未定义的
查找缺少的元素。
| | true
使其忽略元素是否存在。看,只有当我尝试你的解决方案时,我才会得到正确的答案。@Dinizworld这就是我在不尝试的情况下接听电话的结果!编辑。@tophyr,我已经朝着括号的方向思考了。我只是在这种情况下试过。在你编辑之后,它完全符合我的意思。谢谢我再次编辑以修复“false”元素问题,并对整行代码的丑陋程度做了一些评论:)我个人更喜欢手动将
a
赋值与
for
循环逻辑分开,尽管我确实发现您在OP中的语法很有趣(即使这会让这种特殊情况变得很痛苦)。如果数组短于3个元素,则第一个循环不起作用,它将使用
未定义的
查找缺少的元素。
| | true
使其忽略元素是否存在。很抱歉,我忘记了第二个示例中的条件,这应该是一个工作示例,它如何在没有数组/对象的情况下工作。你的解决方案不是我想要的。对不起,我忘记了第二个示例中的条件,它应该是一个工作示例,它如何在没有数组/对象的情况下工作。你的解决方案不是我想要的。你可以把作业放在任何地方