วิธีการสร้างอาร์เรย์ของตัวอักษรวัตถุในวง?


224

ฉันต้องสร้างอาร์เรย์ของตัวอักษรวัตถุเช่นนี้:

var myColumnDefs = [
    {key:"label", sortable:true, resizeable:true},
    {key:"notes", sortable:true,resizeable:true},......

ในวงเช่นนี้

for (var i = 0; i < oFullResponse.results.length; i++) {
    console.log(oFullResponse.results[i].label);
}

ค่าของkeyควรอยู่results[i].labelในแต่ละองค์ประกอบของอาร์เรย์

คำตอบ:


395
var arr = [];
var len = oFullResponse.results.length;
for (var i = 0; i < len; i++) {
    arr.push({
        key: oFullResponse.results[i].label,
        sortable: true,
        resizeable: true
    });
}

18
คุณสามารถข้ามvar obj = {บิตเพียงแค่กดตัวอักษร
Peter Bailey

3
ระยะเวลาในการคำนวณเพียงครั้งเดียวน่าจะเป็นความคิดที่ดีฉันเลือกที่จะเพิ่ม a var objเพื่อทำให้โค้ดชัดเจนยิ่งขึ้นแน่นอนคุณสามารถข้ามไปได้คุณสามารถเขียนสคริปต์ทั้งหมดในหนึ่งบรรทัดหากคุณต้องการ :)
RaYell

3
@kangax ความยาวไม่ได้ "คำนวณ" เป็นการดำเนินการ O (1)
Triptych

8
@Triptych - ใช่ แต่เป็นคุณสมบัติการค้นหาที่คุณดำเนินการกับการวนซ้ำแต่ละครั้งซึ่งไม่ได้ฟรีและสามารถหลีกเลี่ยงได้ Micro-เพิ่มประสิทธิภาพ? อาจ นอกจากนี้ยังเป็นค่า "สด" - หากคุณปรับเปลี่ยนอาร์เรย์ในลูปความยาวจะเปลี่ยนตามการวนซ้ำอย่างต่อเนื่องซึ่งอาจนำไปสู่การไม่มีที่สิ้นสุด ให้สิ่งนี้ดูyoutube.com/watch?v=mHtdZgou0qU
Peter Bailey

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

61

คำตอบของ RaYell ดี - ตอบคำถามของคุณ

ดูเหมือนว่าสำหรับคุณแล้วคุณควรสร้างวัตถุที่มีป้ายชื่อย่อยเป็นวัตถุ:

var columns = {};
for (var i = 0; i < oFullResponse.results.length; i++) {
    var key = oFullResponse.results[i].label;
    columns[key] = {
        sortable: true,
        resizeable: true
    };
}

// Now you can access column info like this. 
columns['notes'].resizeable;

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


1 ตั้งแต่วิธีการแก้ปัญหาที่สำคัญที่ทำให้รู้สึกมากขึ้นและช่วยให้ผมมีความต้องการของฉัน :)
winner_joiner

ดูเหมือนว่าคุณจะหายเซมิโคลอนหลังจากคุณตั้งค่าคีย์ var หรือไม่
superUntitled

คำตอบที่ดีได้รับการมองหาวิธีการเข้าถึงข้อมูลในขณะที่ขอบคุณ
thatOneGuy

ถ้าคีย์จำเป็นต้องมีมากกว่าหนึ่งครั้ง! ['หมายเหตุ'] สามารถเกิดขึ้นได้มากกว่าหนึ่งครั้งแล้วเราจะทำอย่างไร
Milson

1
Milson - ในกรณีนี้มันไม่ใช่ "กุญแจ" จริงๆ
Triptych



4

สิ่งนี้จะได้ผล:

 var myColumnDefs = new Object();
 for (var i = 0; i < oFullResponse.results.length; i++) {
     myColumnDefs[i] = ({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
  }

4

ในแนวคิดเดียวกันของ Nick Riggs แต่ฉันสร้างนวกรรมิกและผลักวัตถุใหม่ในอาร์เรย์โดยใช้มัน มันหลีกเลี่ยงการซ้ำซ้อนของกุญแจของคลาส:

var arr = [];
var columnDefs = function(key, sortable, resizeable){
    this.key = key; 
    this.sortable = sortable; 
    this.resizeable = resizeable;
    };

for (var i = 0; i < len; i++) {
    arr.push((new columnDefs(oFullResponse.results[i].label,true,true)));
}

3

ฉันจะสร้างอาร์เรย์แล้วเพิ่มตัวอักษรของวัตถุต่อท้าย

var myColumnDefs = [];

for ( var i=0 ; i < oFullResponse.results.length; i++) {

    console.log(oFullResponse.results[i].label);
    myColumnDefs[myColumnDefs.length] = {key:oFullResponse.results[i].label, sortable:true, resizeable:true};
}

3
var myColumnDefs = new Array();

for (var i = 0; i < oFullResponse.results.length; i++) {
    myColumnDefs.push({key:oFullResponse.results[i].label, sortable:true, resizeable:true});
}

7
จะดีกว่าที่ init อาร์เรย์ที่ใช้แทน[] new Array()
RaYell

การสนทนาที่น่าสนใจ [] เทียบกับอาร์เรย์ใหม่ () stackoverflow.com/questions/7375120/…
Adrian P.

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