Использование значения обратной функции [duplicate]

22
задан Derek 朕會功夫 16 April 2012 в 03:23
поделиться

19 ответов

Javascript имеет метод reverse(), который вы можете вызвать в массиве

var a = [3,5,7,8];
a.reverse(); // 8 7 5 3

Не уверен, что это то, что вы подразумеваете под «библиотеками, которые вы не можете использовать», я угадываю что-то делать с практикой. Если это так, вы можете реализовать свою собственную версию .reverse()

function reverseArr(input) {
    var ret = new Array;
    for(var i = input.length-1; i >= 0; i--) {
        ret.push(input[i]);
    }
    return ret;
}

var a = [3,5,7,8]
var b = reverseArr(a);

. Обратите внимание, что встроенный метод .reverse() работает с исходным массивом, поэтому вам не нужно переназначать a.

70
ответ дан Patrick Reck 24 August 2018 в 08:49
поделиться

У JavaScript уже есть метод reverse () в Array, поэтому вам не нужно этого делать!

Представьте, что у вас есть массив ниже:

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

Теперь просто просто выполните это:

arr.reverse();

, и вы получите это как результат:

[5, 4, 3, 2, 1];

Но это в основном изменит исходный массив, вы можете написать функцию и использовать ее для возврата новый массив вместо этого, что-то вроде этого:

function reverse(arr) {
  var i = arr.length, reversed = [];
  while(i) {
    i--;
    reversed.push(arr[i]);
  }
  return reversed;
}

Или просто редактирование встроенных методов JavaScript для Array следующим образом:

function reverse(arr) {
  return arr.slice().reverse();
}

, и вы можете вызвать его следующим образом:

reverse(arr); //return [5, 4, 3, 2, 1];

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

0
ответ дан Alireza 24 August 2018 в 08:49
поделиться
function reverseArray(arr) {
    let reversed = [];
    for (i = 0; i < arr.length; i++) { 
    reversed.push((arr[arr.length-1-i]))
    }
  return reversed;
}
0
ответ дан aristotll 24 August 2018 в 08:49
поделиться

20 байт

let reverse=a=>[...a].map(a.pop,a)
7
ответ дан Community 24 August 2018 в 08:49
поделиться

53 байта

function reverse(a){
    for(i=0,j=a.length-1;i<j;)a[i]=a[j]+(a[j--]=a[i++],0)
}

Просто для удовольствия, вот альтернативная реализация, которая быстрее, чем собственный .reverse метод.

0
ответ дан Derek 朕會功夫 24 August 2018 в 08:49
поделиться

Самый короткий обратный метод, который я видел, следующий:

let reverse = a=>a.sort(a=>1)
0
ответ дан Elia Grady 24 August 2018 в 08:49
поделиться
array.reverse() 

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

var arrayOne = [1,2,3,4,5];

var reverse = function(array){
    var arrayOne = array
    var array2 = [];

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

reverse(arrayOne)
2
ответ дан enjareyes 24 August 2018 в 08:49
поделиться

Как насчет без использования push ()!

Решение с использованием XOR!

var myARray = [1,2,3,4,5,6,7,8];

function rver(x){
    var l = x.length;
    for(var i=0; i<Math.floor(l/2); i++){

        var a = x[i];
        var b = x[l-1-i];

        a = a^b;
        b = b^a;
        a = a^b;

        x[i] = a;
        x[l-1-i] = b;
    }

    return x;

}

console.log(rver(myARray));
0
ответ дан ErcanE 24 August 2018 в 08:49
поделиться

Чистые функции для обращения к массиву с использованием функционального программирования:

```
var a = [3,5,7,8];

// ES2015
function immutableReverse(arr) {
  return [ ...a ].reverse();
}

// ES5
function immutableReverse(arr) {
  return a.concat().reverse()
}
```
0
ответ дан Faisal Ali 24 August 2018 в 08:49
поделиться

Я провел несколько испытаний решений, которые не только решают массив, но и делают его копию. Вот тестовый код. Метод reverse2 является самым быстрым в Chrome, но в Firefox метод reverse является самым быстрым.

var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

var reverse1 = function() {
  var reversed = array.slice().reverse();
};

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

var reverse3 = function() {
  var reversed = [];
  array.forEach(function(v) {
    reversed.unshift(v);
  });
};

console.time('reverse1');
for (var x = 0; x < 1000000; x++) {
  reverse1();
}
console.timeEnd('reverse1'); // Around 184ms on my computer in Chrome

console.time('reverse2');
for (var x = 0; x < 1000000; x++) {
  reverse2();
}
console.timeEnd('reverse2'); // Around 78ms on my computer in Chrome

console.time('reverse3');
for (var x = 0; x < 1000000; x++) {
  reverse3();
}
console.timeEnd('reverse3'); // Around 1114ms on my computer in Chrome
2
ответ дан Jagi 24 August 2018 в 08:49
поделиться

Это функциональный способ сделать это.

const array = [1,2,3,4,5,6,"taco"];

function reverse(array){
  return array.map((item,idx) => array[array.length-1-idx])
}
9
ответ дан Jake Boyles 24 August 2018 в 08:49
поделиться
> var arr = [1,2,3,4,5,6];
> arr.reverse();
  [6, 5, 4, 3, 2, 1]
3
ответ дан Joe Frambach 24 August 2018 в 08:49
поделиться

Вы можете сделать

var yourArray = ["first", "second", "third", "...", "etc"]
var reverseArray = yourArray.slice().reverse()

console.log(reverseArray)

Вы получите

["etc", "...", "third", "second", "first"]
0
ответ дан Kangudie Muanza - Killmonger 24 August 2018 в 08:49
поделиться
var myArray = [1,2,3,4,5,6,7,8];

var revMyArr = [].concat(myArray).reverse();
22
ответ дан Mohammad Usman 24 August 2018 в 08:49
поделиться

Это то, что вы хотите:

array.reverse();

DEMO

5
ответ дан qwertymk 24 August 2018 в 08:49
поделиться

Я просто переписал реализацию haskell в js.

const rev = (list, reversed) => {
    if (list.length == 0) return reversed

    reversed.unshift(list[0])
    return rev(list.slice(1), reversed)
}

const reverse = (list) => rev(list, [])
-1
ответ дан TaoJS 24 August 2018 в 08:49
поделиться

Как насчет этого?:

  function reverse(arr) {
    function doReverse(a, left, right) {
      if (left >= right) {
        return a;
      }
      const temp = a[left];
      a[left] = a[right];
      a[right] = temp;
      left++;
      right--;
      return doReverse(a, left, right);
    }

    return doReverse(arr, 0, arr.length - 1);
  }

  console.log(reverse([1,2,3,4]));

https://jsfiddle.net/ygpnt593/8/

0
ответ дан techguy2000 24 August 2018 в 08:49
поделиться

Обратный с помощью метода сортировки

  • Это гораздо более сжатый метод.

const resultN = document.querySelector('.resultN');
const resultL = document.querySelector('.resultL');

const dataNum = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const dataLetters = ['a', 'b', 'c', 'd', 'e'];

const revBySort = (array) => array.sort((a, b) => a < b);

resultN.innerHTML = revBySort(dataNum);
resultL.innerHTML = revBySort(dataLetters);
<div class="resultN"></div>
<div class="resultL"></div>

2
ответ дан techmsi 24 August 2018 в 08:49
поделиться

Вот версия, которая не требует массива temp.

function inplaceReverse(arr) {
  var i = 0;
  while (i < arr.length - 1) {
    arr.splice(i, 0, arr.pop());
    i++;
  }
  return arr;
}

// Useage:
var arr = [1, 2, 3];
console.log(inplaceReverse(arr)); // [3, 2, 1]
3
ответ дан user2914136 24 August 2018 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: