2011-08-03 24 views
5

Có một thành ngữ Javascript/Coffeescript cụ thể chung mà tôi có thể sử dụng để thực hiện việc này không? Chủ yếu là do tò mò.nhập hai mảng (khóa và giá trị) vào một đối tượng

Tôi có hai mảng, một bao gồm các khóa mong muốn và một khác bao gồm các giá trị mong muốn và tôi muốn kết hợp nó vào một đối tượng.

keys = ['one', 'two', 'three'] 
values = ['a', 'b', 'c'] 
+1

JavaScript không có mảng liên kết. Các thành viên đối tượng có thể được truy cập trong một cú pháp giống như mảng, nhưng chúng vẫn là các đối tượng. –

+1

@nikc: Cảm ơn, tôi nhận ra điều đó. Nhưng với bối cảnh, tôi cảm thấy như 'mảng kết hợp' sẽ truyền đạt những gì tôi đã diễn đạt trong ít từ hơn. –

+0

@Jorge - chỉ cần gọi nó là một đối tượng, 'cos đó là những gì javascript có. Ít hơn để nhập quá. ;-) – RobG

Trả lời

12
var r = {}, 
    i, 
    keys = ['one', 'two', 'three'], 
    values = ['a', 'b', 'c']; 

for (i = 0; i < keys.length; i++) { 
    r[keys[i]] = values[i]; 
} 
+0

Câu trả lời hay nhưng có cách nào để giữ bản sao không? – rashadb

+0

@rashadb Không. Đối tượng không thể có khóa trùng lặp. – jhpratt

3

Chừng nào hai mảng là cùng độ dài, bạn có thể làm điều này:

var hash = {}; 
var keys = ['one', 'two', 'three'] 
var values = ['a', 'b', 'c'] 

for (var i = 0; i < keys.length; i++) 
    hash[keys[i]] = values[i]; 

console.log(hash['one']) 
console.log(hash.two); 
+0

Câu trả lời hay nhưng có cách nào để giữ bản sao không? – rashadb

+0

@rashadb Không. Đối tượng không thể có khóa trùng lặp. – jhpratt

6
keys = ['one', 'two', 'three'] 
values = ['a', 'b', 'c'] 

d = {} 

for i, index in keys 
    d[i] = values[index] 

Giải thích: Trong coffeescript bạn có thể lặp lại một mảng và nhận được mỗi mục và vị trí của nó trên mảng hoặc chỉ mục. Vì vậy, bạn có thể sử dụng chỉ mục này để gán các khóa và giá trị cho một đối tượng mới.

+1

Đây là những gì tôi cuối cùng đã làm (mặc dù trước khi bạn trả lời). Tuy nhiên, +1 cho bạn :) –

Các vấn đề liên quan