![](/img/trans.png)
[英]How do I reverse an array in JavaScript in 16 characters or less without .reverse()?
[英]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.