我在寻找是否有更简单的方法来实现以下目标:
var filesCount = files.length;
for (var j = 0; j < filesCount; j++) {
if (j < 5) {
vm.groupFiles.push({
"fileName": fileName,
"fileType": fileType,
"lastModifiedTime": lastModifiedTime,
"isContainer": isContainer,
"serverRedirectedUrl": serverRedirectedUrl,
"cleanTitle": cleanTitle,
"extention": extention
});
} else {
break;
}
}
我尝试了以下方法,但没有用,这使我怀疑是否有可能以简写方法完成而不会污染我的for循环。
for (var i = 0; i < (filesCount || 4); i++) {
}
任何帮助将不胜感激。干杯!
答案 0 :(得分:5)
您可以将count的最小值和5作为长度。
for (var j = 0, l = Math.min(files.length, 5); j < l; j++) {
}
答案 1 :(得分:2)
这个问题最重要的部分可能是理解为什么
for (var i = 0; i < (filesCount || 4); i++) {
}
不起作用。我只能猜测你知道||
的意思是“或”,并试图将英语规则应用于如何使用“或”这个词。 JavaScript和所有编程语言对每个“单词”或符号都有更严格的含义。 ||
是运营商;通过其操作数(左侧和右侧的表达式),它形成一个新的表达式,其值为某个值。
在这种情况下,左边的表达式是filesCount
,右边的表达式是4
。大多数语言都将其根源追溯到C
(其中包含JavaScript),以下是正确的:
a || b
将返回a
和b
的“false”值为“false”值,否则将返回“true”值由于4
是真值,(filecount || 4)
必须始终为真值。 返回的真值的规则因语言而异,绝不应该依赖(出于可读性原因);但是当它在JavaScript中发生时,你将得到第一个操作数(按从左到右的顺序),其值为“true”。因此,如果fileCount
非零,则您的代码与
for (var i = 0; i < filesCount; i++) {
}
代码表现不同的唯一时间是fileCount
为0(或其他一些假值,如null);在这种情况下,它的行为类似于
for (var i = 0; i < 4; i++) {
}
所以我们需要从表达方面思考。而你需要的是一个表达式,其计算结果为fileCount
,除非fileCount
大于5,在这种情况下,它的计算结果为5.(当我这样说时,我将通过你的第一个代码块;对于你在第二个片段中切换到4的原因。)
有很多方法可以获得这种表达方式。大多数都涉及计算,因此在开始循环之前进行一次计算是一个好主意,而不是将表达式直接放在for
语句中。 (这在现代编程中是值得商榷的。这样做的最初原因是为了避免浪费计算,但手工优化几乎总是一个错误。你应该做的事情最简单,或者最好用其余的代码。)
无论如何,一个解决方案是
var n = Math.min(fileCount, 5);
for (var i = 0; i < n; i++) {
}
答案 2 :(得分:1)
您也可以使用简写if / else运算符:
var n = filesCount > 0 && filesCount < 5 ? filesCount : 5;
for (var j = 0; j < n; j++) { }