2015-03-30 2 views
0

Интересно, почему мне нужно было добавить 4 к длине массива, чтобы он распечатывал весь массив в обратном порядке?новичок в javascript, работающий с массивами

, прежде чем я добавил 4 это было только с помощью .Length собственности и печатал только 6543.

спасибо заранее!

function reverseArray(array) { 
    var newArray =[]; 

    for(var i = 0; i <= array.length+4; i++) { 
     newArray += array.pop(i); 
     } 
    return newArray; 
} 
var numbers = [1,2,3,4,5,6]; 
console.log(reverseArray(numbers)); 
+1

Обратите внимание, что '+ =' is ** not ** как вы добавляете запись в массив; в первый раз, когда вы это сделаете, ваш массив будет заменен на строку. –

+1

ОК, поэтому я изменил + = нажать, а его массив снова поблагодарить вас! @ T.J.Crowder – jordan

ответ

0

В JavaScript pop всегда удаляет последний элемент массива. Это сокращает длину, что означает, что i и array.length сходятся.

Вы можете сделать несколько вещей, чтобы избежать этого:

  1. магазин оригинальной длины при запуске цикла: for (var i = 0 , l = array.length; i < l; i++)
  2. Copy над значениями без изменения исходного массива
5

массив.pop удаляет (и возвращает) последний элемент. Это влияет на длину массива. Длина проверяется на каждой итерации, поэтому, поскольку массив становится все короче каждый раз, цикл заканчивается раньше.

Вы можете создать петлю и поп-элементы до тех пор, пока она не станет пустой, но еще одна вещь, которую нужно учитывать, состоит в том, что это исходный массив, который вы изменяете. Я думаю, что функция вроде reverseArray не должна изменять массив numbers, который был передан ему, если он возвращает другой. Таким образом, лучшим решением будет простой цикл, который выполняет итерацию по всем элементам без изменения массива.

function reverseArray(array) 
 
{ 
 
    var newArray =[]; 
 

 
    for (var i = array.length-1; i >= 0; i--) { 
 
    newArray.push(array[i]); 
 
    } 
 
    return newArray; 
 
} 
 

 
var numbers = [1,2,3,4,5,6]; 
 
console.log(reverseArray(numbers)); 
 
console.log(numbers); // Should be unaltered.

Если вы не возражаете, модифицируя массив, вы можете использовать метод reverse() массива:

var numbers = [1,2,3,4,5,6]; 
 
numbers.reverse(); 
 
console.log(numbers);

-1

использования следующий метод для такого же выхода

функция обратныйArray (массив) {

var newArray =[]; 
    var j = array.length-1; 

    for(var i = 0; i < array.length; i++) 

    { 

     newArray[j]= array[i]; j--; 

    } 

    return newArray; 

} 

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

console.log(reverseArray(numbers)); 
+0

Ваша петля обращает массив, но добавляет 'undefined' в начало, потому что вы не используете' array.length - 1'. – Pluto

+0

Спасибо За исправление –

+0

array.length - 1 не требуется, если мы заменим <= на < –

0

Когда вы получаете pop элементы из массива, элемент удаляется из массива. Когда вы увеличиваете счетчик и уменьшаете длину, они будут встречаться на полпути, поэтому вы получаете только половину предметов.

Используйте push, чтобы поместить предметы в результат. Если вы используете +=, он будет создавать строку вместо массива.

Если вы используете pop, то вы можете просто цикл, пока есть какие-либо элементы, оставшиеся в массиве:

function reverseArray(array) { 
    var newArray = []; 
    while (array.length > 0) { 
     newArray.push(array.pop()); 
    } 
    return newArray; 
} 

Вы можете оставить исходный массив неизменным проходом по нему задом и добавлять элементы в новый массив :

function reverseArray(array) { 
    var newArray = []; 
    for (var i = array.length - 1; i >= 0; i--) { 
     newArray.push(array[i]); 
    } 
    return newArray; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^