javascript for循环,获取所有项目或5

时间:2018-02-27 13:33:29

标签: javascript

我在寻找是否有更简单的方法来实现以下目标:

     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++) {
}

任何帮助将不胜感激。干杯!

3 个答案:

答案 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),以下是正确的:

  • 数值0为“false”
  • 非0的数值是“true”
  • 表达式a || b将返回ab的“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++) { }