2016-10-18 3 views
-4

Я хочу получить обратное от этого массива в этом случае ([4,3,2,1]). Проблема в том, что я не могу использовать реверс или другие shorcuts.Обратная функция в JavaScript

const ar = [1, 2, 3, 4] 

const reverse = function (arr) { 


    let x = arr; 

     for(i=0; i<x.length;i++) { 

     x[x.length-i-1]=x[i]; 


     } 
return x; 
}; 

const reversedArray = reverse(ar); 
console.log(reversedArray); 

Я думал, что это должно работать, но когда я бегу я получаю [1, 2, 2, 1] в качестве выходного сигнала. Это потому, что когда i = 1 во втором индексе больше нет 3. Что я могу сделать?

+6

'ar.reverse()' приходит на ум? – adeneo

+0

'Array.prototype.reverse' –

+1

Обратный в другом массиве. – bokan

ответ

1

Вот простой пример. Но вы можете добиться того же результата другими методами.

function reverse(array){ 
    var new_array = []; 
    for(var i = 0; i< array.length; i++){ 
     new_array[i] = array[array.length -i - 1]; 
    } 
    return new_array; 
} 

//how to use 
reverse([1,2,3,4,5]); //output 
+0

Это то, что я хотел –

-1

Не используйте массив как константу. Вероятно, это не позволяет вам вносить изменения в массив.

Затем используйте обратный метод:

ar.reverse(); 
+2

Из вопроса: «** Проблема я не могу использовать «обратные» или другие shorcuts. ** « – Mistalis

2

Это как замена двух переменных без использования темп переменной

const ar = [1, 2, 3, 4] 
 

 
const reverse = function (arr) { 
 

 

 
    let x = arr, len = x.length-1; 
 

 
     for(i=0; i<x.length/2;i++) { 
 

 
      x[i]+=x[len-i]; 
 
      x[len-i]=x[i]-x[len-i]; 
 
      x[i]-=x[len-i] 
 

 

 
     } 
 
return x; 
 
}; 
 

 
const reversedArray = reverse(ar); 
 
console.log(reversedArray);

0

Вы изменяя массив в то время как вы делаете это из-за ссылок Javascript.

Вы можете использовать массив.prototype.reverse (который используется как [] .reverse()) Или вы должны установить новый массив и вернуть его.

1

Вы можете сохранить его простым, используя регулярные for петлю, а затем просто unshift ИНГ значения на новый массив:

function reverse(arr) { 
 
    let reversed = []; 
 
    for (let i = 0; i < arr.length; i++) { 
 
    reversed.unshift(arr[i]); 
 
    } 
 
    return reversed; 
 
} 
 

 

 
console.log(reverse([1, 2, 3, 4])); 
 
console.log(reverse([6, 7, 8, 9]));

1

С while loop и начиная с конца массива:

var arr = [1, 2, 3, 4]; 
 

 
function arrReverse(arr) { 
 
    var res = []; 
 
    var max = arr.length - 1; 
 
    while (max > -1) { 
 
    res.push(arr[max]); 
 
    max -= 1; 
 
    } 
 
    return res; 
 
} 
 

 
var res = arrReverse(arr); 
 
console.log(res);

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