รับรายการสุดท้ายในอาร์เรย์


1142

นี่คือรหัส JavaScript ของฉัน:

var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2]))); 
linkElement.appendChild(newT);

ขณะนี้ใช้เวลารายการที่สองถึงสุดท้ายในอาร์เรย์จาก URL อย่างไรก็ตามฉันต้องการตรวจสอบไอเท็มสุดท้ายในอาร์เรย์"index.html"และถ้าเป็นเช่นนั้นให้หยิบไอเท็มที่สามไปยังไอเท็มสุดท้ายแทน

คำตอบ:


1225
if (loc_array[loc_array.length - 1] === 'index.html') {
   // do something
} else {
   // something else
}

ในกรณีที่เซิร์ฟเวอร์ของคุณให้บริการไฟล์เดียวกันสำหรับ "index.html" และ "index.html" .toLowerCase()คุณยังสามารถใช้:

แม้ว่าคุณอาจต้องการพิจารณาทำฝั่งเซิร์ฟเวอร์นี้ถ้าเป็นไปได้มันจะสะอาดและทำงานให้กับผู้ที่ไม่มี JS


1051

ไม่แน่ใจว่ามีข้อเสียเปรียบหรือไม่ แต่นี่ค่อนข้างกระชับ:

arr.slice(-1)[0] 

หรือ

arr.slice(-1).pop()

ทั้งสองจะกลับมาundefinedถ้าอาเรย์นั้นว่างเปล่า


31
การใช้การทำลายล้างก็ดีเช่นกัน:const [lastItem] = arr.slice(-1)
diachedelic

@diachedelic นี่เป็นวิธีที่ลื่นที่สุด! ! น่ากลัว
Trufa

1
.pop()เอาองค์ประกอบสุดท้ายที่ปรับเปลี่ยนอาร์เรย์เดิม มันไม่เหมือนกับการเรียกคืนค่านั้น
Badrush

3
@Badrush slice () สร้างอาร์เรย์ใหม่ด้วยสำเนาขององค์ประกอบเดียวและ pop แก้ไขเฉพาะสำเนานั้น อาเรย์ดั้งเดิมยังคงไม่เป็นอันตราย
kritzikratzi

แต่คุณควรหลีกเลี่ยงการสร้างอาร์เรย์ใหม่เว้นแต่ว่ารหัสนี้จะไม่ถูกเรียกบ่อย มิฉะนั้นจะเพิ่มความตึงเครียดให้กับการเก็บขยะและ / หรือจะทำให้เบราว์เซอร์ใช้หน่วยความจำมากขึ้น
mvmn

259

ใช้Array.pop :

var lastItem = anArray.pop();

สำคัญ : นี่จะคืนค่าองค์ประกอบสุดท้ายและ ลบออกจากอาร์เรย์


165

เวอร์ชันที่สั้นกว่าของสิ่งที่ @chaiguy โพสต์:

Array.prototype.last = function() {
    return this[this.length - 1];
}

การอ่านดัชนี -1 จะส่งคืนundefinedแล้ว

แก้ไข:

วันนี้การตั้งค่าดูเหมือนว่าจะใช้โมดูลและเพื่อหลีกเลี่ยงการสัมผัสต้นแบบหรือใช้เนมสเปซส่วนกลาง

export function last(array) {
    return array[array.length - 1];
}

8
var lastItem = [3,2,1,5].last();ถ้ามันไม่ชัดเจนว่าวิธีนี้จะใช้จริงนี่คือตัวอย่าง: คุณค่าของการมีlastItem 5
user128216

7
คำตอบนี้ถูกต้องและยังสวยสะอาด แต่ (!!!) กฎของหัวแม่มือใช้ Javascript Do NOT modify objects you Do NOT ownคือว่า มันอันตรายเพราะมีสาเหตุหลายประการเช่น 1. นักพัฒนาคนอื่นที่ทำงานในทีมของคุณอาจสับสนเพราะวิธีนี้ไม่ใช่มาตรฐาน 2. เมื่อมีการอัพเดทใด ๆ ในไลบรารี่หรือแม้แต่การใช้ ECMAScript เวอร์ชันต่ำกว่าหรือสูงกว่า
Farzad YZ

1
สำหรับทุกคนที่สงสัยนี้แบ่ง Array.forEach () ฉันยังเห็นด้วยว่าการดัดแปลงต้นแบบไม่ใช่สิ่งที่เลวร้ายที่สุด แต่อันนี้ไม่ดี
Seph Reed

1
Imo มีไม่ได้เช่นปัญหาใหญ่กับการแก้ไขแต่คุณควรใช้Array.prototype Object.assign(Array.prototype, 'last', { value: function () { … } });มิฉะนั้นคุณสมบัติจะนับได้
黄雨伞


70

นี่คือวิธีรับโดยไม่มีผลกับ ARRAY ดั้งเดิม

a = [1,2,5,6,1,874,98,"abc"];
a.length; //returns 8 elements

ถ้าคุณใช้ pop () มันจะแก้ไขอาเรย์ของคุณ

a.pop();  // will return "abc" AND REMOVES IT from the array 
a.length; // returns 7

แต่คุณสามารถใช้สิ่งนี้ได้ดังนั้นจึงไม่มีผลกับอาเรย์ดั้งเดิม:

a.slice(-1).pop(); // will return "abc" won't do modify the array 
                   // because slice creates a new array object 
a.length;          // returns 8; no modification and you've got you last element 

6
คุณควรทำการแบ่ง (-1) .pop () มิฉะนั้นคุณจะคัดลอกทั้งอาร์เรย์ (คุณต้องคัดลอกองค์ประกอบสุดท้ายเท่านั้น)
kritzikratzi

ไม่จำเป็นต้องpop()ทำเช่นนั้นเพียงแค่ทำarr.slice(-1)[0]
Christophe Marois

56

วิธีที่ "สะอาดที่สุด" ES6 (IMO) จะเป็น:

const foo = [1,2,3,4];
const bar = [...foo].pop();

หลีกเลี่ยงนี้กรรมวิธีfooเช่น.pop()หากว่าได้ถ้าเราไม่ได้นำมาใช้ประกอบการแพร่กระจาย
ที่กล่าวว่าฉันชอบfoo.slice(-1)[0]วิธีแก้ปัญหา


1
นอกจากนี้คุณยังสามารถใช้การทำลายอาร์เรย์เพื่อทำให้ES6 เพิ่มเติม ) stackoverflow.com/a/46485581/31671
alex

36
โปรดทราบว่าโซลูชันนี้จะทำสำเนาของทั้งอาร์เรย์
เบรนแดน Annable

4
มันอ่านไม่ได้เหมือน.slice(-1)[0]แต่ช้ากว่า อาจใช้ได้เช่นกัน.slice
Fregante

12
การคัดลอกอาเรย์ทั้งหมดสำหรับไวยากรณ์ "สะอาด" ดูเหมือนจะโง่สำหรับฉัน มันไม่แม้แต่จะมองว่าดี
Jemar โจนส์

43

ฉันอยากจะใช้ array.pop()มากกว่าดัชนี

while(loc_array.pop()!= "index.html"){
}
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length])));

วิธีนี้คุณจะได้องค์ประกอบก่อนหน้า index.html เสมอ (การจัดเตรียมอาร์เรย์ของคุณแยก index.html เป็นรายการเดียว) หมายเหตุ:คุณจะสูญเสียองค์ประกอบสุดท้ายจากอาร์เรย์


38

ฉันคิดว่าถ้าคุณต้องการได้รับองค์ประกอบโดยไม่ต้องลบก็ง่ายกว่านี้ใช้:

arr.slice(-1)[0]

หมายเหตุ: ถ้าอาร์เรย์ว่างเปล่า (เช่น[]) สิ่งนี้จะส่งคืนundefinedนี้จะกลับมา

โดยวิธีการ ... ฉันไม่ได้ตรวจสอบประสิทธิภาพ แต่ฉันคิดว่าง่ายและสะอาดกว่าในการเขียน


โปรดทราบว่า a) สิ่งนี้ไม่ส่งคืนค่าสุดท้าย แต่อาร์เรย์ที่มีองค์ประกอบสุดท้าย ( arr.slice(-1)[0] === arr[arr.length - 1]) และ b) ช้าเพราะคัดลอกarrไปยังอาร์เรย์ใหม่ (ดูstackoverflow.com/a/51763533/2733244สำหรับการวัดประสิทธิภาพ)
wortwart

33

const [lastItem] = array.slice(-1);

Array.prototype.slice ที่มี -1 สามารถใช้สร้าง Array ใหม่ที่มีเฉพาะรายการสุดท้ายของ Array ดั้งเดิมจากนั้นคุณสามารถใช้Destructuring Assignmentเพื่อสร้างตัวแปรโดยใช้รายการแรกของ Array ใหม่นั้น

const lotteryNumbers = [12, 16, 4, 33, 41, 22];
const [lastNumber] = lotteryNumbers.slice(-1);

console.log(lotteryNumbers.slice(-1));
// => [22]
console.log(lastNumber);
// => 22


30

รับรายการสุดท้ายของอาร์เรย์สามารถทำได้โดยใช้ชิ้นวิธีสมีค่าลบ

คุณสามารถอ่านเพิ่มเติมได้ที่นี่ที่ด้านล่าง

var fileName = loc_array.slice(-1)[0];
if(fileName.toLowerCase() == "index.html")
{
  //your code...
}

การใช้ pop () จะเปลี่ยนอาเรย์ของคุณซึ่งไม่ใช่ความคิดที่ดีเสมอไป


1
Slice ส่งคืนอาร์เรย์ แต่ใช้งานarr.slice(-1)[0]เหมือนคำตอบนี้
Cees Timmerman

4
หากประสิทธิภาพเป็นปัญหาโปรดทราบว่าวิธีนี้ช้ากว่าarray[array.length - 1] jsperf.com/get-last-item-from-array/13 มาก
Bruno Peres

29

คุณสามารถใช้รูปแบบนี้ ...

let [last] = arr.slice(-1);

ในขณะที่มันค่อนข้างอ่านอย่างเก็บไว้ในใจมันจะสร้างแถวใหม่ดังนั้นจึงมีประสิทธิภาพน้อยกว่าโซลูชั่นอื่น ๆ แต่มันจะแทบไม่เคยเป็นคอขวดประสิทธิภาพการทำงานของแอพลิเคชันของคุณ


25

คำถามนี้มีมานานแล้วดังนั้นฉันประหลาดใจที่ไม่มีใครพูดถึงเพียงแค่เอาองค์ประกอบสุดท้ายกลับมาหลังจาก pop()คำถามนี้ได้รับรอบเป็นเวลานานดังนั้นฉันประหลาดใจที่ไม่มีใครกล่าวถึงเพียงแค่ใส่กลับองค์ประกอบล่าสุดเมื่อวันที่หลังจาก

arr.pop()มีประสิทธิภาพเท่ากับarr[arr.length-1]และทั้งสองอย่างมีความเร็วเท่ากันarr.push()กัน

ดังนั้นคุณสามารถออกไปกับ:

--- แก้ไข [ตรวจสอบว่าthePopไม่ใช่undefinedก่อนผลัก] ---

let thePop = arr.pop()
thePop && arr.push(thePop)

--- สิ้นสุดการแก้ไข ---

ซึ่งสามารถลดลงถึงสิ่งนี้ (ความเร็วเดียวกัน [แก้ไข: แต่ไม่ปลอดภัย!]):

arr.push(thePop = arr.pop())    //Unsafe if arr empty

นี่ช้ากว่าสองเท่าarr[arr.length-1]แต่คุณไม่ต้องทำอะไรกับดัชนี นั่นคุ้มค่าทองคำทุกวัน

จากโซลูชั่นที่ฉันได้ลองและมีหลายหน่วยในเวลาดำเนินการ (ETU) ของarr[arr.length-1]:

[วิธีการ] .............. [ETUs 5 elems] ... [ETU 1 ล้าน elems]

arr[arr.length - 1]      ------> 1              -----> 1

let myPop = arr.pop()
arr.push(myPop)          ------> 2              -----> 2

arr.slice(-1).pop()      ------> 36             -----> 924  

arr.slice(-1)[0]         ------> 36             -----> 924  

[...arr].pop()           ------> 120            -----> ~21,000,000 :)

ตัวเลือกสามตัวสุดท้ายโดยเฉพาะ[...arr].pop()ยิ่งแย่ลงมากเมื่อขนาดของอาร์เรย์เพิ่มขึ้น บนเครื่องที่ไม่มีข้อ จำกัด ด้านหน่วยความจำของเครื่องของฉัน[...arr].pop()อาจคงอัตราส่วนไว้ที่ 120: 1 ยังไม่มีใครชอบหมูทรัพยากร


3
หากเริ่มต้นอาร์เรย์สามารถเว้นว่างวิธีนี้จะส่งผลให้ไม่ถูกต้องและจะกลายเป็น[] [undefined]คุณต้องป้องกันแรงดันย้อนหลังด้วยการundefinedตรวจสอบที่ชัดเจนสิ่งที่ต้องการmyPop !== undefined && arr.push(myPop)
dhilt

23

หากต้องการได้องค์ประกอบสุดท้ายในครั้งเดียวเขา / เธออาจใช้Array#splice():

lastElement = document.location.href.split('/').splice(-1,1);

ที่นี่ไม่จำเป็นต้องเก็บองค์ประกอบแยกในอาเรย์แล้วไปที่องค์ประกอบสุดท้าย หากการรับองค์ประกอบสุดท้ายเป็นเพียงวัตถุประสงค์เดียวสิ่งนี้ควรใช้

หมายเหตุ: สิ่งนี้จะเปลี่ยนอาร์เรย์เดิมโดยลบองค์ประกอบสุดท้าย คิดว่าsplice(-1,1)เป็นpop()ฟังก์ชั่นที่ปรากฏองค์ประกอบสุดท้าย


5
สิ่งนี้ไม่ส่งคืนองค์ประกอบสุดท้ายในอาร์เรย์แทนที่จะเป็นองค์ประกอบสุดท้ายเองหรือ

2
@tozazaburo ไม่เหมือนกันเหรอ?
Aram Kocharyan

5
สิ่งนี้จะปรับเปลี่ยนอาร์เรย์ คุณสามารถใช้ slice (-1) แทน splice (-1) เพื่อปล่อยให้อาร์เรย์เดิมไม่มีการแตะต้อง @AramKocharyan ที่ไม่มีไม่ได้เปรียบเทียบVS["hi"] "hi"
kritzikratzi

20

สำหรับผู้ที่ไม่กลัวที่จะโอเวอร์โหลดต้นแบบ Array (และด้วยการปิดบังการแจงนับคุณไม่ควร):

Object.defineProperty( Array.prototype, "getLast", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function() {
        return this[ this.length - 1 ];
    }
} );


18

ฉันใช้underscorejsโดยทั่วไปคุณสามารถทำได้

if (_.last(loc_array) === 'index.html'){
  etc...
}

สำหรับฉันที่มีความหมายมากกว่า loc_array.slice(-1)[0]


18

นี่คือ Javascript อาร์ตมากขึ้นถ้าคุณมาที่นี่เพื่อค้นหามัน

ด้วยจิตวิญญาณของคำตอบอื่นที่ใช้reduceRight()แต่สั้นกว่า:

[3, 2, 1, 5].reduceRight(a => a);

ขึ้นอยู่กับความจริงที่ว่าในกรณีที่คุณไม่ได้ระบุค่าเริ่มต้นองค์ประกอบสุดท้ายจะถูกเลือกให้เป็นองค์ประกอบเริ่มต้น (ตรวจสอบเอกสารที่นี่ ) เนื่องจากการโทรกลับยังคงส่งคืนค่าเริ่มต้นองค์ประกอบสุดท้ายจะเป็นคืนที่สิ้นสุด

ระวังว่านี่ควรได้รับการพิจารณาเป็นศิลปะจาวาสคริปต์และไม่ได้เป็นวิธีที่ฉันแนะนำให้ทำส่วนใหญ่เป็นเพราะมันทำงานในเวลา O (n) แต่ยังเพราะมันเจ็บอ่านง่าย

และตอนนี้สำหรับคำตอบที่จริงจัง

วิธีที่ดีที่สุดที่ฉันเห็น (พิจารณาว่าคุณต้องการให้รัดกุมกว่าarray[array.length - 1]) คือ:

const last = a => a[a.length - 1];

จากนั้นใช้ฟังก์ชั่น:

last([3, 2, 1, 5])

ฟังก์ชั่นนี้มีประโยชน์จริง ๆ ในกรณีที่คุณจัดการกับอาเรย์ที่ไม่ระบุชื่อเช่นที่[3, 2, 1, 5]ใช้ข้างบนมิฉะนั้นคุณจะต้องสร้างอินสแตนซ์ของมันสองครั้งซึ่งจะไม่มีประสิทธิภาพและน่าเกลียด:

[3, 2, 1, 5][[3, 2, 1, 5].length - 1]

ฮึ.

ตัวอย่างเช่นนี่เป็นสถานการณ์ที่คุณมีอาร์เรย์ที่ไม่ระบุชื่อและคุณต้องกำหนดตัวแปร แต่คุณสามารถใช้last()แทน:

last("1.2.3".split("."));

16

เพียงแค่ใส่ตัวเลือกอื่นที่นี่

loc_array.splice(-1)[0] === 'index.html'

ฉันพบวิธีข้างต้นที่สะอาดและสั้นมากขึ้น กรุณาอย่าลังเลที่จะลองสิ่งนี้

หมายเหตุ: มันจะแก้ไขอาเรย์ดั้งเดิมถ้าคุณไม่ต้องการที่จะแก้ไขมันคุณสามารถใช้ slice()

loc_array.slice(-1)[0] === 'index.html'

ขอบคุณ@VinayPai ที่ชี้เรื่องนี้


ตามความคิดเห็นโดยstackoverflow.com/users/510036/qix-monica-was-mistreatedในบทความนี้stackoverflow.com/questions/9050345/และการทดสอบที่jsperf.com/last-array-element2 ที่ช้ามาก
Subash

13

หลายวิธีในการค้นหาค่าสุดท้ายของอาร์เรย์ในจาวาสคริปต์

  • โดยไม่ส่งผลกระทบต่ออาเรย์ดั้งเดิม

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

console.log(arr.slice(-1)[0])
console.log(arr[arr.length-1])
const [last] = [...arr].reverse();
console.log(last)
console.log(arr.reverse()[0])

  • ปรับเปลี่ยนอาร์เรย์เดิม

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

console.log(arr.pop())
arr.push(5)
console.log(...arr.splice(-1));

  • โดยการสร้างวิธีการช่วยเหลือของตัวเอง

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

Object.defineProperty(arr, 'last', 
{ get: function(){
  return this[this.length-1];
 }
})

console.log(arr.last);


หากตัวอย่างแรกของคุณที่คุณระบุ"ไม่ส่งผลกระทบต่ออาเรย์ดั้งเดิม"และโดยการทำตามที่แนะนำ: console.log(arr.reverse()[0]) - ขอแสดงความยินดีคุณเพิ่งแก้ไขอาเรย์ดั้งเดิม
Roko C. Buljan

12
const lastElement = myArray[myArray.length - 1];

นี่คือตัวเลือกที่ดีที่สุดจากมุมมองประสิทธิภาพ (เร็วกว่า arr.slice (-1) 1,000 ครั้ง)


10

โดยส่วนตัวแล้วฉันจะตอบคำถามโดย kuporific / kritzikratzi วิธีการ array [array.length-1] น่าเกลียดมากถ้าคุณทำงานกับอาร์เรย์ที่ซ้อนกัน

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

array.slice(-1)[0]

//instead of 

array[array.length-1]

//Much easier to read with nested arrays

array.slice(-1)[0].slice(-1)[0]

//instead of

array[array.length-1][array[array.length-1].length-1]

10

ในข้อเสนอ ECMAScript ขั้นที่ 1มีข้อเสนอแนะเพื่อเพิ่มคุณสมบัติอาร์เรย์ที่จะส่งคืนองค์ประกอบสุดท้าย: ข้อเสนออาร์เรย์สุดท้ายข้อเสนออาร์เรย์สุดท้าย

ไวยากรณ์:

arr.lastItem // get last item
arr.lastItem = 'value' // set last item

arr.lastIndex // get last index

คุณสามารถใช้polyfill

ผู้เขียนข้อเสนอ: Keith Cirkel ( chai autor)


10

เพื่อป้องกันการลบรายการสุดท้ายออกจากอาเรย์ต้นกำเนิดคุณสามารถใช้

Array.from(myArray).pop()

รองรับเบราว์เซอร์ทั้งหมดเป็นส่วนใหญ่ (ES6)


1
ขอให้โชคดีกับอาร์เรย์ขนาดใหญ่ขององค์ประกอบ 100,000 หรือมากกว่า
Soldeplata Saketos


9

สิ่งที่คุณไม่เพียง แต่ใช้reverse() !!!

คำตอบบางคำพูดถึงreverseแต่อย่าพูดถึงข้อเท็จจริงที่ว่าreverseแก้ไขอาเรย์ดั้งเดิมและไม่ส่งคืนสำเนา

var animals = ['dog', 'cat'];

animals.reverse()[0]
"cat"

animals.reverse()[0]
"dog"

animals.reverse()[1]
"dog"

animals.reverse()[1]
"cat"

นี่อาจเป็นรหัสที่เลวร้ายที่สุดในการดีบัก!


4
หากคุณต้องการสำเนาที่กลับรายการของอาร์เรย์คุณสามารถใช้ตัวดำเนินการแพร่กระจายได้ทันที เช่น[...animals].reverse()
Josh R

คุณสามารถคัดลอกอาเรย์ก่อนใช้งานย้อนกลับได้[1,3,4,5,"last"].slice().reverse()[0]
Madeo

9

การทำลายวัตถุ ES6 เป็นอีกวิธีที่จะไป

const {length, [length-1]: last}=[1,2,3,4,5]
console.log(last)

คุณแยกคุณสมบัติความยาวจาก Array โดยใช้การทำลายวัตถุ คุณสร้างคีย์แบบไดนามิกอื่นโดยใช้คีย์ที่แยกแล้วโดย[length-1]และกำหนดให้เป็นแบบล่าสุดทั้งหมดในหนึ่งบรรทัด


ค่อนข้างยุ่งยาก แต่ฉลาด
Adrien Castagliola

ขอบคุณคุณช่วยอธิบายว่ามันทำอะไรกันแน่
Tarun Nagpal

8

คุณสามารถเพิ่มgetter คุณสมบัติใหม่ให้กับต้นแบบของArrayมันเพื่อให้สามารถเข้าถึงได้ผ่านทุกอินสแตนซ์ของArrayเพื่อที่จะสามารถเข้าถึงได้ผ่านทุกกรณี

Getters อนุญาตให้คุณเข้าถึงค่าส่งคืนของฟังก์ชันเหมือนกับว่าเป็นค่าของคุณสมบัติ ค่าตอบแทนของฟังก์ชั่นของหลักสูตรคือมูลค่าสุดท้ายของอาร์เรย์this[this.length - 1] )

ในที่สุดคุณก็ห่อไว้ในสภาพที่ตรวจสอบว่าlast- คุณสมบัติยังคงundefined(ไม่ได้กำหนดโดยสคริปต์อื่นที่อาจขึ้นอยู่กับมัน)

if(typeof Array.prototype.last === 'undefined') {
    Object.defineProperty(Array.prototype, 'last', {
        get : function() {
            return this[this.length - 1];
        }
    });
}

// Now you can access it like
[1, 2, 3].last;            // => 3
// or
var test = [50, 1000];
alert(test.last);          // Says '1000'

ไม่ทำงานใน IE 8


Array.prototype.lastอยู่เสมอundefined? ถ้าไม่ทำงานภายใต้ Chrome 36
bryc

7

แก้ไข:

เมื่อเร็ว ๆ นี้ฉันมาพร้อมกับโซลูชันอีกหนึ่งซึ่งตอนนี้ฉันคิดว่าดีที่สุดสำหรับความต้องการของฉัน:

function w(anArray) {
  return {
    last() {
      return anArray [anArray.length - 1];
    };
  };
}

ด้วยความหมายข้างต้นมีผลฉันสามารถพูด:

let last = w ([1,2,3]).last();
console.log(last) ; // -> 3

ชื่อ"w"หมายถึง "wrapper" คุณสามารถดูว่าคุณสามารถเพิ่มวิธีการอื่น ๆ นอกเหนือจาก 'last ()' ไปยัง wrapper นี้ได้อย่างไร

ฉันพูดว่า "ดีที่สุดสำหรับความต้องการของฉัน" เพราะนี่ทำให้ฉันสามารถเพิ่ม "วิธีการช่วยเหลือ" อื่น ๆ ลงใน JavaScript ชนิดใดก็ได้ได้อย่างง่ายดาย สิ่งที่อยู่ในใจคือรถยนต์ () และ cdr () ของ Lisp


ทำไมต้องใช้เสื้อคลุม หากคุณต้องเรียกใช้wฟังก์ชันให้ทำให้ฟังก์ชันคืนค่ารายการสุดท้าย
Fregante

w([1,2,3]).lengthไม่ได้กำหนด w([1,2,3])[1]ไม่ได้กำหนด ดูเหมือนจะไม่มีเสื้อคลุมสำหรับฉัน และมีข้อผิดพลาดทางไวยากรณ์ คุณมีส่วนเสริม ';' ดูstackoverflow.com/a/49725374/458321สำหรับวิธีการเขียน wrapper คลาส (คลาส SutString) และใช้การสะท้อนเพื่อเติมข้อมูล wrapper นั้น ถึงแม้ว่าอิโมะเสื้อคลุมนั้นช่างเกินกำลัง ดีกว่าที่จะใช้ encapsulation เช่นคุณเกือบจะมี return { arr: anArray, last() { return anArray[anArray.length - 1]; } };. นอกจากนี้ w เป็นวิธีทั่วไปเกินไป การโทรคือ ArrayW หรืออะไรบางอย่าง
TamusJRoyce

6

ฉันคิดว่าวิธีที่ง่ายที่สุดและไม่มีประสิทธิภาพที่สุดคือ:

var array = ['fenerbahce','arsenal','milan'];
var reversed_array = array.reverse(); //inverts array [milan,arsenal,fenerbahce]
console.log(reversed_array[0]) // result is "milan".

43
โซลูชันนี้ใช้เวลา O (n) หน่วยความจำเพิ่มเติมและใช้เวลา O (n) มันไม่ได้เป็นทางออกที่ดี
hlin117
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.