Javascript:难以分析for循环中包含indexOf的代码

Javascript:难以分析for循环中包含indexOf的代码,javascript,for-loop,indexof,Javascript,For Loop,Indexof,我正在进行名为SecondGreatLow的coderbyte挑战赛。我们得到一个数字数组作为参数,并且应该返回给定数组中第二低的和第二高的 我正在使用其他人的代码-我正在分析/反向工程它,但有一部分我感到困惑。代码如下: function SecondGreatLow(arr) { var unique = [arr[0]]; for(var i = 1; i < arr.length; i++) { if (unique.indexOf(arr[i]) == -1)

我正在进行名为SecondGreatLow的coderbyte挑战赛。我们得到一个数字数组作为参数,并且应该返回给定数组中第二低的和第二高的

我正在使用其他人的代码-我正在分析/反向工程它,但有一部分我感到困惑。代码如下:

function SecondGreatLow(arr) { 
  var unique = [arr[0]];
  for(var i = 1; i < arr.length; i++) {
    if (unique.indexOf(arr[i]) == -1) {
      unique.push(arr[i]);
    }
  }
  unique.sort(function(a,b){return a - b});
  var smallest = unique[1].toString();
  unique.reverse();
  var largest = unique[1].toString();

  return smallest + " " + largest; 

}
^即获取给定数组/参数中第一个元素的值,并将其存储在名为“unique”的数组中

然后有一个从索引1(而不是0)开始的for循环

假设我们正在进行for循环的第一次迭代,i=1。。。我们想找到arr[1]的索引,它将是数组的第二个值。但是哪个阵列呢?indexOf方法正在“unique”上运行,因此我们是在查找unique数组的第二个值的索引(当前只有(arr[0])??还是在查找作为参数传入的数组的第二个值的索引

在第一次运行for循环时,unique数组中没有第二个元素/值(因为只有1个值),因此我们将推动该元素/将该元素添加到unique数组中

基本上,我对代码的上半部分实际上在做什么感到困惑。任何帮助都将不胜感激

如果你想用一个例子,我想,假设数组[7,7,12,98,106]作为一个参数传递给你


提前感谢…

如果唯一数组不包含与arr[i]匹配的值,请将其添加到唯一数组中

循环从i=1开始的原因是,arr[0]已存储在unique中。我们正在迭代
arr
,并检查unique,如果值不存在,则添加到unique

对于您的示例,我已经获取了该代码段并在其中添加了一些日志记录。以下是每次通过for循环后的结果:

getUniques([7, 7, 12, 98, 106])
  ["start with 7", "7"]
  ["try 7", "7"]
  ["try 12", "7,12"]
  ["try 98", "7,12,98"]
  ["try 106", "7,12,98,106"]

RESULT: [7, 12, 98, 106]
for(变量i=1;i
此代码在数组长度上循环,从索引1开始,而不是从0开始。不需要从0开始,因为我们可以假设第一项是唯一的


unique.indexOf
正在检查数组元素是否存在于
unique
数组中。如果indexOf返回-1,这意味着元素不存在于unique中,因此
将其推送到数组中,否则,for循环将增加到数组中的下一项

谢谢。我想我的问题应该得到-1,也许是吧这是一个愚蠢的问题?哈哈,在if语句中有什么可以代替indexOf的吗?例如,if(arr[I]!=\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu???还有其他可以替代的东西,但indexOf将是最简单的。如果你想包含另一个javascript库,下划线.js有一个包含函数。你想避免indexOf的原因是什么?不完全是,我只是在检查是否有更简单的方法。不过非常感谢。你会知道undersco吗从头开始重新运行?(如果您不知道答案,无需查找,我只是想知道……)您必须在页面中包含库underline.js,并且您可以调用u.include(list,value)(如果您传入数组,而不是对象,下划线的包含将在内部遵从indexOf)。
for(var i = 1; i < arr.length; i++) {
if (unique.indexOf(arr[i]) == -1) {
  unique.push(arr[i]);
getUniques([7, 7, 12, 98, 106])
  ["start with 7", "7"]
  ["try 7", "7"]
  ["try 12", "7,12"]
  ["try 98", "7,12,98"]
  ["try 106", "7,12,98,106"]

RESULT: [7, 12, 98, 106]
for(var i = 1; i < arr.length; i++) {
   if (unique.indexOf(arr[i]) == -1) {
     unique.push(arr[i]);
   }
}