创build一个新的数组来计算特定数字之间的距离

这很容易误解,所以我会简化它。 比方说,我有一个数组是掷骰子的结果。 喜欢:

1 2 4 6 1 2 6 6 2 4等

每次你扔6,你赢了。 我想创build一个新的数组,其中包含多less回合后,你会赢得基于原始数组。 所以上面的数组会创build一个数组:

4 3 1

(需要4回合赢,然后3,然后1)

所以我只想计算一下6之间的距离。 (我也可以将骰子结果转换成二进制输/赢)

我如何在Excel中做到这一点? (或JavaScript,但真的很喜欢Excel)

创build一个帮助器列(Excel的A列)。 将1放在Helper列的第一个单元格(A2)中。 按照公式(A3)= IF(B3 = 6,A2 + 1,A2)进行跟踪。拖动到给定数组的最后一行。

然后创build一个结果列(Excel的C列)。 在公式(C2)中input= IF(ROW()-1 = MAX(A:A),“”,IF(IF(ROW)-1 = COUNTIF(A:A,ROW()-1) + 1,COUNTIF(A:A,ROW() – 1))= 0 “”,IF(ROW() – 1 = 1,COUNTIF(A:A,ROW() – 1)+ 1,COUNTIF(A :A,ROW() – 1))))

在结果列的第一个单元格中(Excel的C列)。 拖动并获得所需的结果。

隐藏帮助者列。

注意:数组数据从单元格B2开始

Excel截图

如果第一个数组是B1:K1,则第二个数组可能会创build为:

=IF(B1=6,COLUMN()-SUM(A2:$B2)-1,"") 

在B2和复制到适合。

这可能适合你:

 var rollsUntil6 = function(rolls) { return rolls.reduce(function(indices, roll, idx) { if (roll == 6) {indices.push(idx);} return indices; }, [-1]).map(function(val, idx, arr) { return val - arr[idx - 1]; }).slice(1); }; rollsUntil6([1, 2, 4, 6, 1, 2, 6, 6, 2, 4]); //=> [4, 3, 1] 

你需要做的是迭代数组,并通过累加到一个收集器variables来计算空间。 你可以find它下面的代码刚刚popup和警报窗口。(Javascript)

 var array = [1, 2, 4, 6, 1, 2, 6, 6, 2, 4] var resultArray = [] var i = 0; var distance = 0; for (i = 0; i < array.length; i++) { distance++; if (array[i] == 6) { resultArray.push(distance); distance = 0; } } alert(resultArray); 

你可以反复findarray.indexOf(6,lastmatch)

var array = [1,2,4,6,1,2,6,6,2,4];

 var resultArray= [], i, incr= 0; while((i= array.indexOf(6, incr))!= -1){ i+= 1; resultArray.push(i-incr); incr= i; } 

resultArray返回值:(Array)[4,3,1]