ใน CoffeeScript คุณผนวกค่าเข้ากับ Array ได้อย่างไร?


98

วิธีที่กำหนดในการผนวกค่าเข้ากับ Array ใน CoffeeScript คืออะไร? ฉันได้ตรวจสอบหนังสือ PragProg CoffeeScript แล้ว แต่จะกล่าวถึงการสร้างการแบ่งส่วนและการเชื่อมต่อและการทำซ้ำ แต่ไม่ต่อท้าย

คำตอบ:


192

ของเก่าpushยังใช้ได้ดี

x = []
x.push 'a'

9
ผู้เขียนหนังสือ PragProgที่นี่ +1 สำหรับคำตอบของ Thilo ฉันไม่ต้องการพูดถึงArrayวิธีการต้นแบบในหนังสือเล่มนี้เนื่องจากมีเอกสาร JavaScript ที่ดีมากมายอยู่แล้ว ดูตัวอย่างเช่นdeveloper.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Trevor Burnham

แล้วถ้าเรามีวัตถุไม่ใช่ตัวละครล่ะ?
Gaʀʀʏ

ฉันคาดหวังว่าx << 'a'จะได้ทำงาน
Chloe

49

ดีกว่าคือการใช้ความเข้าใจในรายการ

ตัวอย่างเช่นมากกว่านี้:

things = []
for x in list
  things.push x.color

ทำสิ่งนี้แทน:

things = (x.color for x in list)

23
นั่นไม่ได้ผนวกค่าจากรายการไปยังสิ่งต่างๆ ซึ่งแทนที่อาร์เรย์สิ่งต่างๆทั้งหมด ฉันเพิ่งทดสอบด้วย
ajsie

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

3
@suranyami ตรงกันข้ามฉันไม่สามารถคิดว่าจะมีประโยชน์อะไรสำหรับสิ่งนั้น ฉันอยากจะทำthings = listมันค่อนข้างสั้นกว่านี้
Michael Dorst

@suranyami ลิงก์ตายแล้ว
derekdreery

@anthropomorphic ดีแน่นอน มันเป็นตัวอย่างที่สร้างขึ้น สมมติว่าเป็นแบบนี้แทน: colors = (item.color for item in list)
suranyami

2

หากคุณกำลังผูกมัดการโทรคุณต้องการให้ภาคผนวกส่งคืนอาร์เรย์แทนที่จะเป็นความยาว ในกรณีนี้คุณสามารถใช้. concat ([newElement])

ต้องเป็น [newElement] เนื่องจาก concat คาดหวังว่าอาร์เรย์จะเหมือนกับอาร์เรย์ที่เชื่อมต่อกัน ไม่มีประสิทธิภาพ แต่ดูดีในการตั้งค่าที่เหมาะสม


การโทรแบบต่อเนื่องเป็นสิ่งที่มีสไตล์มากกว่าที่คุณสามารถทำได้ดังที่คุณระบุว่า "วิธีการไม่มีประสิทธิภาพ" - concatส่งคืนอาร์เรย์ใหม่ที่สร้างจากองค์ประกอบของอาร์เรย์ A + อาร์เรย์ B การอ้างอิงถึงวัตถุจะถูกเก็บไว้ดังนั้นการเปลี่ยนแปลงวัตถุที่อ้างถึง ในอาร์เรย์ A อาร์เรย์ B หรือผลการเรียงต่อกันจะแสดงในอาร์เรย์อื่น ๆ เช่นกัน
SidOfc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.