2015-05-06 29 views
5

在这种情况下,我使用了两个并行阵列(cost[]scores[]),这两个阵列上的数据相互平行。单个for循环如何迭代多个数组?

此代码与我正在使用的书中复制它一样正确。我没有得到的是这个for循环如何处理成本数组。我得到我们在函数中传递两个数组作为参数,但在for循环中只有scores.length,所以不应该是cost.lenght的另一个循环?

function getMostCostEffectiveSolution(scores, costs, highScore) 
    var cost = 100; 
    var index; 

    for (var i = 0; i < scores.length; i++) { 
     if (scores[i] == highScore) { 
      if(cost > cost[i]) { 
       index = i; 
       cost = cost[i]; 
      } 
     } 
    } 
    return index; 
} 
+7

它LO像代码这样的代码假设成本和分数具有相同的长度。如果它们的长度相同,则只需使用其中一种长度。请注意,如果您使用'cost [i]'的时候可能应该是'costs [i]'' –

+2

如果它们是平行数组,它们的长度是不是相同? – froadie

+0

我认为在这种情况下,两个阵列的长度是相同的。 –

回答

4

http://en.wikipedia.org/wiki/Parallel_array

在计算中,一组平行阵列的是 表示的记录阵列的数据结构。它使一个单独的,均匀的阵列 用于记录的每个字段,每个具有相同数量的元素

的如果它们二者是真正平行比两个阵列将是相同的长度。

所以scores.length == costs.length。你只需要为循环条件使用一个,并使用相同的索引变量来访问这两个数组。

var a = [1,2,3]; 
var b = [4,5,6]; 

for(var i=0; i<a.length; i++){ 
    console.log(a[i] +" "+ b[i]); 
} 

输出:

1 4 
2 5 
3 6 

使用B的长度

for(var i=0; i<b.length; i++){ 
    console.log(a[i] +" "+ b[i]); 
} 

输出:

1 4 
2 5 
3 6 
+0

只是一个想法,但您可以将for循环在'if(a.length == b.length){for ...}'中 – Dendromaniac