如何将排序数组的元素打印到中间元素然后返回到零

时间:2018-03-22 01:47:51

标签: javascript arrays loops sorting for-loop

我需要在Javascript中创建一个For循环来打印“Sorted Array”的元素,直到“Middle element”值。

一旦循环到达中间元素的循环,按降序打印元素,从当前值返回到索引0。

这是我到目前为止所尝试的内容:

var r6 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100];

r6.sort(function(a, b) {
  return a - b
});; // I have a sorted array
r6.length; // I have the length of the array
var theMiddle = Math.floor(r6.length / 2); // I know the Middle element;
var value = r6[theMiddle];


// I need to create a For Loop to print the elements of the "Sorted Array" up to the "Middle element" value.
for (a = 0; a < r6.length / 2; a++) {

  document.writeln(r6[a]);
}

document.writeln("<br/>");
//Once the loop reaches the cycle of the middle element, print the elements in descending order, from current value back to index 0.


for (var i = r6.length - 1; i >= 0; i--) {
  document.writeln(r6[i]);
}

我希望所有的印刷品都是在线的。 如何进行降序For循环从50开始到0打印? (你可以看到我让它从100到0工作) 如何使其在线打印? (通过使用嵌套循环?)

1 个答案:

答案 0 :(得分:0)

这非常直截了当。你只需要了解for循环是如何工作的,答案就变得很明显了,所以让我在迭代数组的上下文中为你解释一些for循环。

首先,我们将在下面的示例中定义我将使用的数组。

var ary = [0,10,20,30,40,50,60,70,80,90];
//indexes: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
//length: 10

让我们从一个for循环开始,从第一个元素到最后一个元素遍历数组。

var startIndex = 0;
//0 is the index of the first element
var endIndex = ary.length - 1;
// 10 - 1 = 9 which is the index of the last element

for (var curIndex = startIndex; curIndex <= endIndex; curIndex++) {
    console.log(ary[curIndex]);
}
//this will log:
0
10
20
30
40
50
60
70
80
90

for循环基本上有3个部分:

  1. var curIndex = startIndex 您可以在此告诉它您希望从哪个索引开始。
  2. curIndex <= endIndex 这是您告诉它希望它以哪个索引结束的地方。
  3. curIndex++ 这是你告诉它去哪个方向(每次迭代要走多远)的地方。
  4. 那么现在如果我们想要从第一个元素迭代到中间呢? 我们所要做的就是将var endIndex = ary.length - 1;更改为var endIndex = Math.floor(ary.length / 2) - 1;。基本上我们正在进行相同的计算,除非我们假装数组的长度是我们获得中间元素的索引而不是最后一个元素的索引。 / p>

    var startIndex = 0;
    //0 is the index of the first element
    var endIndex = Math.floor(ary.length / 2) - 1;
    // (10 / 2) - 1 = 4 which is the index of the middle element
    
    for (var curIndex = startIndex; curIndex <= endIndex; curIndex++) {
        console.log(ary[curIndex]);
    }
    //this will log:
    0
    10
    20
    30
    40
    

    现在让我们看一下从最后一个元素到第一个元素迭代的for循环。这与我的第一个示例基本相同,只是curIndex++更改为curIndex--,因为我们想要倒数而不是因为我们计算curIndex <= endIndex需要更改为{{ 1}}(因为我们想要在curIndex >= endIndex低于curIndex时停止迭代,而不是在它超过它时停止迭代。

    endIndex

    那么现在如果我们想从中间元素迭代到第一个元素呢?如果我们希望它从中间元素开始,我们需要将var startIndex = ary.length - 1; var endIndex = 0; for (var curIndex = startIndex; curIndex >= endIndex; curIndex--) { console.log(ary[curIndex]); } //this will log: 90 80 70 60 50 40 30 20 10 0 设置为(在上面的示例中)?

    在回答问题的其他部分时,您的结果会打印在两个不同的行上,因为您通过说startIndex告诉它添加换行符。