簡體   English   中英

如何在沒有.reverse() 的情況下反轉 javaScript 中的數組

[英]How do i reverse an array in javaScript without .reverse()

我正在嘗試反轉數組的內容。 當所述數組的內容屬於同一類型時,我的方法效果很好。 但是一旦它們是不同的類型,它就不起作用了。
約束是我不能使用.reverse()方法,如果可能的話,不創建新數組。
這個問題的答案接近我想要的,但我不明白。

這是我的代碼...

反向.js

#!/usr/bin/node
exports.rev = function (list) {
  for (let i = 0, j = (list.length - 1); i <= (list.length / 2); i++, j--) {
    [list[i], list[j]] = [list[j], list[i]];
  }
  return (list);
};

main.js

#!/usr/bin/node
const rev = require('./reverse').rev;

console.log(rev([1, 2, 3, 4, 5]));
console.log(rev(["School", 89, { id: 12 }, "String"]));

預期的:
[5, 4, 3, 2, 1]
["String", { id: 12 }, 89, "School"]

我得到了什么:
[5, 4, 3, 2, 1]
["String", 89, { id: 12 }, "School"]

我發現你的代碼幾乎可以工作。 您只需要稍微修改一下條件即可

i < (list.length / 2) //not `<=`

 function rev(list) { for (let i = 0, j = (list.length - 1); i < (list.length / 2); i++, j--) { [list[i], list[j]] = [list[j], list[i]]; } return (list); }; console.log(rev([1, 2, 3, 4, 5])); console.log(rev(["School", 89, { id: 12 }, "String"]));

let array = [1, 2, 3, 4, 5]
let reverse = [];

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

您可以嘗試使用這樣的for循環:

 let arr = ["School", 89, { id: 12 }, "String"]; let newArr = []; for (let i = arr.length - 1; i >= 0; i--) { newArr.push(arr[i]) } console.log(newArr);

預期 output: ["String", [object Object] { id: 12 }, 89, "School"]

您可以使用遞歸來反轉

您可以使用擴展運算符( ... )以及二結構分配。

 function rev(arr) { const [first, ...rest] = arr return arr.length > 1? [...rev(rest), first]: arr } console.log(rev([1, 2, 3, 4, 5])); console.log(rev(["School", 89, { id: 12 }, "String"]));

const [first, ...rest] = arr是:

const first = arr[0]
const rest = arr.slice(1)

但是, ...rev(rest)將傳播返回數組的項目並傳播它們。 因此, [...rev(rest), first]將首先保留 rev 的 output,然后在數組末尾first推送。


如果您對原始數組的突變感到滿意,請試試這個

 function rev(arr) { return arr.length > 1? [arr.pop(), ...rev(arr)]: arr } console.log(rev([1, 2, 3, 4, 5])); console.log(rev(["School", 89, { id: 12 }, "String"]));

已經很好的答案(和數組的例子)here

我嘗試使用本機方法:

 const rev = (arr) => { len = arr.length; for (i = 1; i<= len; i++) arr.splice(len-i,0,arr.shift()); } const array = ["School", 89, { id: 12 }, "String"]; console.log("original",array); rev(array); console.log("reversed",array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM