วิธีรับองค์ประกอบแรกของอาร์เรย์


236

คุณจะได้รับองค์ประกอบแรกจากอาร์เรย์ดังนี้:

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

ฉันลองสิ่งนี้:

alert($(ary).first());

[object Object]แต่มันก็จะกลับมา 'first'ดังนั้นผมจึงจำเป็นต้องได้รับองค์ประกอบแรกจากอาร์เรย์ที่ควรจะเป็นองค์ประกอบ


2
ฉันขอแนะนำอย่างยิ่งให้เรียงลำดับคำตอบโดยใช้งานอยู่
leonheess

คำตอบ:


338

แบบนี้

alert(ary[0])

35
var a = []; a[7] = 'foo'; alert(a[0]);
Petah

72
นี่อนุมานว่าองค์ประกอบแรกในอาร์เรย์มักจะมีดัชนีเป็น 0 คุณรู้ว่าสิ่งที่พวกเขาพูดเกี่ยวกับข้อสันนิษฐาน ...
Andy

16
@Andy ไม่มีข้อสันนิษฐานเนื่องจากคำถามของ OP ค่อนข้างชัดเจนและเจาะจง
John Hartsock

5
@ Petah ไม่มีอะไรผิดปกติกับรหัสนั้น มันแสดงให้เห็นว่าไม่ได้กำหนดเนื่องจากนั่นคือค่าของ [0] ซึ่งจริงๆแล้วเป็นรายการแรกในอาร์เรย์ หากคุณต้องการให้มันแสดง foo คุณควรข้ามค่าที่ไม่ได้กำหนดทั้งหมด แต่มันจะไม่ใช่รายการแรกในอาร์เรย์
Michiel van der Blonk

5
@MichielvanderBlonk ฉันแค่ชี้กรณีที่ผู้ใช้บางคนอาจไม่คาดหวัง
Petah

202

เหตุใดคุณจึง jQuery-ifying อาเรย์ของวนิลา JavaScript ใช้ JavaScript มาตรฐาน!

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
alert(ary[0]);

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

นอกจากนี้ ต้องการ jQuery มากขึ้น

แหล่งที่มามารยาทของbobince


1
อ้างถึงคำตอบนี้ว่าทำไมโซลูชันนี้จึงไม่ทำงาน
Gustavo Straube

92

บางวิธีด้านล่างสำหรับสถานการณ์ที่แตกต่างกัน

ในกรณีปกติส่วนใหญ่วิธีที่ง่ายที่สุดในการเข้าถึงองค์ประกอบแรกคือโดย

yourArray[0]

แต่สิ่งนี้ต้องการให้คุณตรวจสอบว่ามีจริง [0] อยู่หรือไม่

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

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

yourArray.shift()

สิ่งสำคัญที่ควรทราบคือทั้งสองข้างต้นเป็นเพียงตัวเลือกถ้าอาร์เรย์ของคุณเริ่มต้นด้วยดัชนี [0]

มีหลายกรณีที่องค์ประกอบแรกถูกลบออกตัวอย่างเช่นลบ yourArray [0] โดยปล่อยให้อาร์เรย์ของคุณมี "หลุม" ตอนนี้องค์ประกอบที่ [0] ไม่ได้ถูกกำหนด แต่คุณต้องการรับองค์ประกอบ "ที่มีอยู่" เป็นครั้งแรก ฉันได้เห็นกรณีของโลกแห่งความเป็นจริงมากมาย

ดังนั้นสมมติว่าเราไม่มีความรู้เกี่ยวกับอาเรย์และคีย์แรก (หรือเรารู้ว่ามีรู) เรายังสามารถรับองค์ประกอบแรกได้

คุณสามารถใช้find ()เพื่อรับองค์ประกอบแรก

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

var firstItem = yourArray.find(x=>x!==undefined);

ฉันต้องการรวมตัวกรอง ()ที่นี่เป็นตัวเลือกในการ "แก้ไข" อาเรย์แรกในการคัดลอกแล้วรับองค์ประกอบแรกในขณะที่รักษาอาเรย์เดิมที่ไม่เปลี่ยนแปลง (ไม่แก้ไข)

อีกเหตุผลที่จะรวม filter () ที่นี่ก็คือมันมีอยู่ก่อน find () และโปรแกรมเมอร์จำนวนมากได้ใช้ไปแล้ว (เป็น ES5 เทียบกับ find () เป็น ES6)

var firstItem = yourArray.filter(x => typeof x!==undefined).shift();

คำเตือนว่าตัวกรอง () ไม่ใช่วิธีที่มีประสิทธิภาพ (ตัวกรอง () ไหลผ่านองค์ประกอบทั้งหมด) และสร้างอาร์เรย์อื่น มันเป็นเรื่องดีที่จะใช้กับอาร์เรย์ขนาดเล็กเนื่องจากผลกระทบต่อประสิทธิภาพจะต่ำกว่าใกล้กับการใช้ forEach ตัวอย่างเช่น

(ฉันเห็นบางคนแนะนำให้ใช้สำหรับ ... ในลูปเพื่อรับองค์ประกอบแรก แต่ฉันอยากจะแนะนำกับวิธีนี้สำหรับ ... ในไม่ควรใช้เพื่อทำซ้ำในอาร์เรย์ที่ลำดับดัชนีมีความสำคัญเพราะมันไม่ได้ ' ไม่รับประกันการสั่งซื้อแม้ว่าคุณจะสามารถโต้แย้งได้ว่าเบราว์เซอร์ส่วนใหญ่เคารพคำสั่งซื้อ แต่สำหรับแต่ละไม่ได้แก้ปัญหาเป็นจำนวนมากแนะนำเพราะคุณไม่สามารถทำลายมันและมันจะทำงานผ่านองค์ประกอบทั้งหมดคุณจะดีกว่าการใช้ง่ายสำหรับ วนรอบและโดยการตรวจสอบคีย์ / ค่า

ทั้ง find () และ filter () รับประกันลำดับขององค์ประกอบดังนั้นจึงปลอดภัยที่จะใช้ดังกล่าว


1
ทำไมไม่เพียง แต่ยกเลิกการเลื่อนอาร์เรย์ในภายหลังเช่น: var element = yourArray.shift (); yourArray.unshift (องค์ประกอบ);
เกร็ก

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

1
@Selay ที่ขึ้นอยู่กับ internals เฉพาะของล่าม
Michiel van der Blonk

@Michiel van der Blonk คุณช่วยบอกฉันหน่อยได้ไหมว่าล่ามตัวไหนที่คุณพูดถึง ฉันสนใจมาก การใช้งานทั้งหมดที่ฉันรู้จักใช้ลูปและคัดลอก มันเป็นวิธีการทำงานของ JavaScript อาร์เรย์ คุณไม่สามารถลบองค์ประกอบแรกได้ง่ายๆเพียงเพราะตอนนี้อาร์เรย์ที่เหลือเริ่มจาก 1 (ลบองค์ประกอบที่ตำแหน่ง 0) ซึ่งคุณต้องแก้ไข คุณไม่สามารถสร้างเวทมนต์ได้ไม่ว่าคุณจะมีการใช้งานภายในแบบใด
Selay

หากคุณใช้yourArray.map(n=>n).shift()มันจะส่งคืนรายการแรกโดยไม่แก้ไขต้นฉบับ ... ไม่ทราบว่าเป็นวิธีที่ดีที่สุดหรือไม่ถ้าคุณเชื่อมโยงอาร์เรย์ด้วย. map (). filter (). some (). shift () ไม่เป็นไร .. มิฉะนั้นฉันจะใช้yourArray[0]
Michael J. Zoidl

53

องค์ประกอบของดัชนี 0 อาจไม่มีอยู่หากองค์ประกอบแรกถูกลบ:

let a = ['a', 'b', 'c'];
delete a[0];

for (let i in a) {
  console.log(i + ' ' + a[i]);
}

วิธีที่ดีกว่าในการรับองค์ประกอบแรกโดยไม่มี jQuery:

function first(p) {
  for (let i in p) return p[i];
}

console.log( first(['a', 'b', 'c']) );


1
a.entries () [0] ควรจะทำมัน :)
สันส์เมดินา

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

วิธี ES6 ที่คล้ายกัน (ยังไม่ขึ้นอยู่กับดัชนีตัวเลข) ที่นี่: stackoverflow.com/a/56115413/7910454
leonheess

51

ใช้การทำลายล้าง ES6

let [first] = [1,2,3];

ซึ่งเป็นเช่นเดียวกับ

let first = [1,2,3][0];

อาจเกี่ยวข้องกับการเพิ่มว่า Destructing เป็นเพียงตัวเลือกถ้าอาร์เรย์ของคุณเริ่มต้นด้วยดัชนี [0]
เกียจคร้าน

46

หากคุณต้องการที่จะรักษาreadibilityคุณก็สามารถเพิ่มฟังก์ชั่นแรกที่Array.protoype:

Array.prototype.first = function () {
    return this[0];
};

จากนั้นคุณสามารถดึงองค์ประกอบแรกได้อย่างง่ายดาย:

[1, 2, 3].first();
> 1

14
มันถือว่าเป็นวิธีปฏิบัติที่เลวร้ายมากที่คนจรจัดที่มีต้นแบบของคลาสพื้นฐานในทางใดทางหนึ่งด้วยเหตุผลที่ดี
Dmitry Matveev

11
โง่วิธีการพิมพ์.first()ดีกว่าทำ[0]อย่างไร
jonschlinkert

10
@jonschlinkert 1บางภาษามีดัชนีที่เริ่มต้นที่ firstในกรณีนั้นจะไม่คลุมเครือ
Bartek Banachewicz

6
[] .first () ส่งคืนอะไร
Rhyous

1
ในการทดสอบของฉันมันกลับไม่ได้กำหนด ฉันพยายามที่จะตัดสินใจว่าฉันชอบมันกลับมาไม่ได้กำหนด
Rhyous

33

คุณสามารถใช้find():

let first = array.find(Boolean);

หรือถ้าคุณต้องการองค์ประกอบแรกแม้ถ้ามันเป็นfalsy :

let first = array.find(e => true);

ไปไมล์พิเศษ:

หากคุณสนใจเกี่ยวกับความสามารถในการอ่าน แต่ไม่ต้องการพึ่งพาเหตุการณ์ที่เป็นตัวเลขคุณสามารถเพิ่มfirst()-function ได้Array.protoypeโดยการกำหนดด้วยวิธีObject​.define​Property()ที่ช่วยลดข้อผิดพลาดของการปรับเปลี่ยนต้นแบบวัตถุในตัว Array โดยตรง ( อธิบายไว้ที่นี่ )

ประสิทธิภาพค่อนข้างดี ( find()หยุดหลังจากองค์ประกอบแรก) แต่ไม่สมบูรณ์หรือเข้าถึงได้ในระดับสากล (ES6 เท่านั้น) สำหรับพื้นหลังมากขึ้นอ่านคำตอบ @Selays

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(e => true);     // or this.find(Boolean)
  }
});

จากนั้นเพื่อดึงองค์ประกอบแรกที่คุณสามารถทำได้:

let array = ['a', 'b', 'c'];
array.first();

> 'a'

ตัวอย่างเพื่อดูการทำงาน:

Object.defineProperty(Array.prototype, 'first', {
  value() {
    return this.find(Boolean);
  }
});

console.log( ['a', 'b', 'c'].first() );


3
นี่คือคำตอบที่ดีที่สุดและทันสมัยที่สุด ฉันกำลังจะโพสต์ที่นี่เหมือนกัน แต่หลังจากที่ฉันเห็นของคุณ :)
46432

และจะเกิดอะไรขึ้นหากในภาษาในอนาคตพวกเขาจะเพิ่ม find () :-) ข้อมูลโค้ดด้านบนจะไม่ทำลายหรือไม่
Bogdan

@Bogdan คุณหมายถึงอะไรเมื่อพวกเขาจะเพิ่มfind() ? find()เป็นส่วนหนึ่งของภาษามานานแล้ว นี่เป็นเหตุผลว่าทำไมข้อมูลโค้ดด้านบนจึงใช้งานได้
ว่างเปล่า

โอ๋ ขอโทษทีเหนื่อยน้อยไม่ได้หลับมากฉันหมายถึงก่อน
Bogdan

@Bogdan มันจะยังคงทำงานได้อย่างสมบูรณ์แบบ แต่เขียนทับอนาคตที่อาจเกิดขึ้น - first()วิธีการของภาษา
leonheess

18

หากอาร์เรย์ของคุณไม่ได้รับประกันว่าจะได้รับการเติมจากดัชนีศูนย์คุณสามารถใช้Array.prototype.find():

var elements = []
elements[1] = 'foo'
elements[2] = 'bar'

var first = function(element) { return !!element }    
var gotcha = elements.find(first)

console.log(a[0]) // undefined
console.log(gotcha) // 'foo'

3
สิ่งนี้ควรได้รับคะแนนสูงกว่าจริงๆ มันเป็นคำตอบที่กระชับที่สุดที่ฉันเห็นว่าใช้วานิลลา js และบัญชีสำหรับอาร์เรย์เบาบาง
Dominic P


1
ฉันแนะนำไม่ให้ใช้!!elementเพราะจะข้ามค่าที่ผิดพลาด ผมขอแนะนำให้ใช้find()ในลักษณะนี้:sparse.find((_, index, array) => index in array);
วิกเตอร์เวลลิ่ง

วิธีการที่คล้ายกันโดยไม่ยกเลิกค่าเท็จที่นี่: stackoverflow.com/a/56115413/7910454
leonheess

13
array.find(e => !!e);  // return the first element 

ตั้งแต่ "ค้นหา" ให้ส่งคืนองค์ประกอบแรกที่ตรงกับตัวกรอง && !!eจับคู่องค์ประกอบใด ๆ

หมายเหตุ นี้จะทำงานเฉพาะเมื่อองค์ประกอบแรกไม่ได้เป็น "Falsy": null, false, NaN, "", 0,undefined


1
อีกไม่นานที่จะชี้แจงให้คนอื่นเห็นว่าสภาพของคุณตรงกับองค์ประกอบที่เป็นความจริงเช่น <code> const example = [null, NaN, 0, ไม่ได้กำหนด, {}, 3, 'a']; const firstTruthyElement = example.find (e => !! e); // กำหนดองค์ประกอบที่ 5 ซึ่งไม่ใช่รายการแรกที่เป็นเท็จ: {} </code>
PDA

ขอบคุณ @PDA สำหรับการติดตาม BTW สตริงว่างถือเป็นเท็จเช่นกัน
Abdennour TOUMI

3
สิ่งนี้ยอดเยี่ยมและใช้งานได้ดีใน TypeScript สิ่งที่เกี่ยวกับการทำให้ง่ายขึ้นarray.find(() => true);? สิ่งนี้ช่วยให้คุณทำ[false].find(() => true)เช่นกัน
Simon Warta

@SimonWarta แน่นอน.find(value => true)เป็นเพียงการทำงานตามที่คาด ... แต่ตรงไปตรงมาถ้าคุณต้องการรหัสทำความสะอาดและเพื่อให้การพิมพ์ใน typescript ใช้destructuring
Flavien Volken

ดูคำตอบนี้สำหรับวิธีที่คล้ายกันโดยไม่มีข้อผิดพลาดของการละเว้นองค์ประกอบที่ผิดพลาด
เหงา



7

ฉันรู้ว่าคนที่มาจากภาษาอื่นสู่ JavaScript มองหาสิ่งที่ต้องการhead()หรือfirst()รับองค์ประกอบแรกของอาร์เรย์ แต่คุณจะทำอย่างไร

ลองนึกภาพคุณมีอาร์เรย์ด้านล่าง:

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

ใน JavaScript คุณสามารถทำได้:

const first = arr[0];

หรือผู้ชนะวิธีที่ใหม่กว่าคือ:

const [first] = arr;

แต่คุณสามารถเขียนฟังก์ชั่นอย่างเช่น ...

function first(arr) {
   if(!Array.isArray(arr)) return;
   return arr[0];
}

หากใช้ขีดล่างมีรายการฟังก์ชันที่ทำสิ่งเดียวกันกับที่คุณค้นหา:

_.first 

_.head

_.take

6

วิธีการที่ทำงานร่วมกับอาร์เรย์และทำงานกับวัตถุด้วยเช่นกัน (ระวังวัตถุไม่มีคำสั่งที่รับประกัน!)

ฉันชอบวิธีนี้มากที่สุดเพราะอาร์เรย์ดั้งเดิมไม่ได้ถูกแก้ไข

// In case of array
var arr = [];
arr[3] = 'first';
arr[7] = 'last';
var firstElement;
for(var i in arr){
    firstElement = arr[i];
    break;
}
console.log(firstElement);  // "first"

// In case of object
var obj = {
    first: 'first',
    last: 'last',
};

var firstElement;

for(var i in obj){
    firstElement = obj[i];
    break;
}

console.log(firstElement) // First;

5

ใน ES2015 ขึ้นไปให้ใช้การทำลายอาร์เรย์:

const arr = [42, 555, 666, 777]
const [first] = arr
console.log(first)


นั่นเป็นคำตอบเดียวกับstackoverflow.com/a/48761812/7910454แต่ไม่กี่เดือนต่อมา
leonheess

4

อีกหนึ่งสำหรับผู้ที่เกี่ยวข้องกับองค์ประกอบความจริงเท่านั้น

ary.find(Boolean);

4

ค้นหาองค์ประกอบแรกในอาร์เรย์โดยใช้ตัวกรอง:

ใน typescript:

function first<T>(arr: T[], filter: (v: T) => boolean): T {
    let result: T;
    return arr.some(v => { result = v; return filter(v); }) ? result : undefined;
}

ในจาวาสคริปต์ธรรมดา:

function first(arr, filter) {
    var result;
    return arr.some(function (v) { result = v; return filter(v); }) ? result : undefined;
}

และในทำนองเดียวกัน indexOf:

ใน typescript:

function indexOf<T>(arr: T[], filter: (v: T) => boolean): number {
    let result: number;
    return arr.some((v, i) => { result = i; return filter(v); }) ? result : undefined;
}

ในจาวาสคริปต์ธรรมดา:

function indexOf(arr, filter) {
    var result;
    return arr.some(function (v, i) { result = i; return filter(v); }) ? result : undefined;
}

3

เมื่อมีการแข่งขันหลายรายการจะใช้. .first () ของ JQuery สำหรับดึงองค์ประกอบ DOM แรกที่ตรงกับตัวเลือก css ที่กำหนดให้กับ jQuery

คุณไม่จำเป็นต้องใช้ jQuery เพื่อจัดการกับอาร์เรย์ของ JavaScript


3

ทำไมไม่คิดว่าอาเรย์ของคุณจะว่างเปล่า?

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
first = (array) => array.length ? array[0] : 'no items';
first(ary)
// output: first

var ary = [];
first(ary)
// output: no items

3

เพียงแค่ใช้ ary.slice(0,1).pop();

ใน

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

console.log("1º "+ary.slice(0,1).pop());
console.log("2º "+ary.slice(0,2).pop());
console.log("3º "+ary.slice(0,3).pop());
console.log("4º "+ary.slice(0,4).pop());
console.log("5º "+ary.slice(0,5).pop());
console.log("Last "+ary.slice(-1).pop());

array.slice (ที่ START END) .pop ();


ทำไมนี้และไม่ary[0]?
nathanfranke


1

ใช้สิ่งนี้เพื่อแยกตัวอักษรในจาวาสคริปต์

var str = "boy, girl, dog, cat";
var arr = str.split(",");
var fst = arr.splice(0,1).join("");
var rest = arr.join(",");

1

ตัวอย่างก่อนหน้านี้ทำงานได้ดีเมื่อดัชนีอาร์เรย์เริ่มต้นที่ศูนย์ คำตอบของ thomaxไม่ได้ขึ้นอยู่กับดัชนีที่เริ่มต้นที่ศูนย์ แต่ขึ้นอยู่Array.prototype.findกับสิ่งที่ฉันไม่สามารถเข้าถึงได้ วิธีแก้ปัญหาต่อไปนี้โดยใช้jQuery $ .eachทำงานได้ดีในกรณีของฉัน

let haystack = {100: 'first', 150: 'second'},
    found = null;

$.each(haystack, function( index, value ) {
    found = value;  // Save the first array element for later.
    return false;  // Immediately stop the $.each loop after the first array element.
});

console.log(found); // Prints 'first'.

1

คุณสามารถทำได้โดยlodash _.headอย่างง่ายดาย

var arr = ['first', 'second', 'third', 'fourth', 'fifth'];
console.log(_.head(arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>


2
มันarr[0]เป็นอย่างที่คุณเห็นนี่คือเหตุผลว่าทำไมฉันถึงไม่กล้าใช้ห้องสมุดขนาดมหึมาเช่น lodash สำหรับงานเล็ก ๆ
ว่างเปล่า

1

var ary = ['first', 'second', 'third', 'fourth', 'fifth'];
alert(Object.values(ary)[0]);


นี่คือวานิลลา JS, ไม่มี jQuery, libs, no-nothing .. : P .. มันจะทำงานถ้าดัชนีอาร์เรย์ไม่เริ่มที่ศูนย์มันจะทำงานถ้าโลกยังไม่สิ้นสุด ....
Merak Marey

0

@NicoLwk คุณควรลบองค์ประกอบที่มีรอยต่อที่จะเปลี่ยนอาร์เรย์ของคุณกลับ ดังนั้น:

var a=['a','b','c'];
a.splice(0,1);
for(var i in a){console.log(i+' '+a[i]);}

2
คำตอบนี้เป็นความคิดเห็นเพื่อ above (NicoLwks) คำตอบและควรจะถูกลบ
Lino

0

ประกาศต้นแบบเพื่อรับองค์ประกอบอาร์เรย์แรกเป็น:

Array.prototype.first = function () {
   return this[0];
};

จากนั้นใช้เป็น:

var array = [0, 1, 2, 3];
var first = array.first();
var _first = [0, 1, 2, 3].first();

หรือเพียงแค่ (:

first = array[0];

0

หากคุณกำลังผูกมัดฟังก์ชันมุมมองให้กับอาร์เรย์เช่น

array.map(i => i+1).filter(i => i > 3)

และต้องการองค์ประกอบแรกหลังจากฟังก์ชั่นเหล่านี้คุณสามารถเพิ่ม.shift()มันไม่ได้ปรับเปลี่ยนต้นฉบับarrayมันเป็นวิธีที่ดีกว่าarray.map(i => i+1).filter(=> i > 3)[0]

หากคุณต้องการองค์ประกอบแรกของอาร์เรย์โดยไม่ต้องแก้ไขต้นฉบับคุณสามารถใช้array[0]หรือarray.map(n=>n).shift()(ไม่มีแผนที่คุณจะแก้ไขต้นฉบับในกรณีนี้ btw ฉันจะแนะนำ..[0]รุ่น


0
var ary = ['first', 'second', 'third', 'fourth', 'fifth'];

console.log(Object.keys(ary)[0]);

สร้างอาร์เรย์วัตถุใด ๆ ( req) จากนั้นเพียงObject.keys(req)[0]เลือกคีย์แรกในอาร์เรย์วัตถุ


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

0

คำตอบของ @thomax ค่อนข้างดี แต่จะล้มเหลวหากองค์ประกอบแรกในอาร์เรย์เป็นเท็จหรือเท็จ -y (0, สตริงว่าง ฯลฯ ) ดีกว่าที่จะแค่คืนความจริงให้กับสิ่งอื่นที่ไม่ได้กำหนด:

const arr = [];
arr[1] = '';
arr[2] = 'foo';

const first = arr.find((v) => { return (typeof v !== 'undefined'); });
console.log(first); // ''

-1

ง่าย ES6:

let a = []
a[7] = 'A'
a[10] = 'B'

let firstValue = a.find(v => v)
let firstIndex = a.findIndex(v => v)

1
ไม่…มันจะส่งคืนค่าที่กำหนดเป็นครั้งแรก ถ้าอันแรกเป็นโมฆะ, ไม่ได้กำหนด, เท็จ, 0 หรือสตริงที่ว่างเปล่าอันนั้นจะถูกข้าม ลอง:[false, 0, null, undefined, '', 'last'].find(v => v)
Flavien Volken

ข้อดีข้อแก้ปัญหาของฉันใช้ได้กับอาร์เรย์ที่มีค่าที่กำหนดเท่านั้น
Jan Jarčík

1
ถ้าอย่างนั้นทำไมต้องกรองโดยใช้ค่า? a.find(value => true)จะไม่ยกเลิกค่าใด ๆ ยังฉันไม่แนะนำให้ใช้ find เพื่อรับไอเท็มแรก
Flavien Volken

1
@ MiXT4PE กลับมาจริง (เหมือนในคำตอบของคุณ) ก็โอเคเพราะมันจะหยุดที่องค์ประกอบแรกที่นี่มันจะส่งคืนองค์ประกอบตัวเอง ... ซึ่งจะดำเนินการต่อหากมีการพิจารณาว่าเป็นเท็จ
Flavien Volken

1
@ MiXT4PE ใช้ "ค้นหา" ช้ากว่าซับซ้อนกว่าและหรูหราน้อยกว่า ฉันยังสงสัยว่ามีผู้แก้ไขอัจฉริยะคนใดที่สามารถปรับการดำเนินการนี้ การใช้การทำลายนั้นมีประสิทธิภาพมากขึ้นเข้าใจภาษา (ดังนั้นคุณสามารถ refactor), คอมไพเลอร์เข้าใจชนิด (ในกรณีของ TS) และน่าจะเป็นทางออกที่เร็วที่สุด
Flavien Volken
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.