var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
โดยทั่วไปคุณจะสร้างวัตถุตามตัวอักษรที่มี 2 คุณสมบัติ (เรียกว่าkey
และvalue
) และแทรก (ใช้push()
) ลงในอาร์เรย์
แก้ไข:ดังนั้นเกือบ 5 ปีต่อมาคำตอบนี้กำลังลดลงเพราะไม่ได้สร้างตัวอักษรวัตถุ "ปกติ" JS (แผนที่อาคา, อาคาแฮ, พจนานุกรมอาคา) อย่างไรก็ตาม
มันกำลังสร้างโครงสร้างที่ OP ขอ (ซึ่งแสดงให้เห็นในคำถามอื่นที่เชื่อมโยงกับ) ซึ่งเป็นอาร์เรย์ของตัวอักษรของวัตถุแต่ละตัวมีkey
และvalue
คุณสมบัติ อย่าถามฉันว่าทำไมโครงสร้างนั้นถึงต้องการ แต่มันเป็นโครงสร้างที่ถูกถาม
แต่ถ้าสิ่งที่คุณต้องการในวัตถุ JS ธรรมดา - และไม่ใช่โครงสร้าง OP ขอ - ดูคำตอบของ tcllแม้ว่าสัญกรณ์วงเล็บจะค่อนข้างยุ่งยากถ้าคุณมีคีย์ง่ายๆที่เป็นชื่อ JS ที่ถูกต้อง คุณสามารถทำสิ่งนี้:
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
หรือใช้เครื่องหมายจุดปกติเพื่อตั้งค่าคุณสมบัติหลังจากสร้างวัตถุ:
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
คุณทำต้องการโน้ตวงเล็บถ้าคุณได้มีคีย์ที่มีช่องว่างในพวกเขาอักขระพิเศษหรือสิ่งที่ต้องการที่ เช่น:
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
นอกจากนี้คุณยังต้องการเครื่องหมายวงเล็บหากคีย์ของคุณเป็นแบบไดนามิก:
dict[firstName + " " + lastName] = "some value";
โปรดทราบว่าคีย์ (ชื่อคุณสมบัติ) เป็นสตริงเสมอและค่าที่ไม่ใช่สตริงจะถูกบังคับให้เป็นสตริงเมื่อใช้เป็นคีย์ เช่นDate
วัตถุได้รับการแปลงเป็นตัวแทนสตริง:
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
อย่างไรก็ตามโปรดทราบว่าสิ่งนี้ไม่จำเป็นต้อง "แค่ใช้งานได้" เนื่องจากวัตถุจำนวนมากจะมีการแสดงสตริงเหมือน"[object Object]"
ที่ไม่ได้ทำขึ้นสำหรับคีย์ที่ไม่ซ้ำกัน ดังนั้นจงระวังสิ่งที่ชอบ:
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
แม้จะมีobjA
และเป็นองค์ประกอบที่สมบูรณ์แตกต่างและไม่ซ้ำกันพวกเขาทั้งสองมีเหมือนกันแสดงสตริงพื้นฐานobjB
"[object Object]"
เหตุผลที่Date
ไม่ทำงานเช่นนี้คือDate
ต้นแบบมีtoString
วิธีการที่กำหนดเองซึ่งแทนที่การแสดงสตริงเริ่มต้น และคุณสามารถทำเช่นเดียวกัน:
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(โปรดทราบว่าเนื่องจากด้านบนใช้หมายเลขสุ่มการชนชื่อสามารถเกิดขึ้นได้ง่ายมากมันเป็นเพียงการแสดงให้เห็นถึงการนำไปปฏิบัติtoString
)
ดังนั้นเมื่อพยายามใช้วัตถุเป็นคีย์ JS จะใช้การtoString
ดำเนินการของวัตถุเองถ้ามีหรือใช้การแทนค่าสตริงเริ่มต้น