Tôi muốn thực hiện một chức năng gọi là createAssociativeArray
mà sẽ recive hai tham số: string
và object
, như thế này:Tạo một cấu trúc lồng nhau đối tượng bằng chuỗi chìa khóa/path
function createAssociativeArray(string, object) {
//...
}
Mục cuối cùng của string
sẽ nhận được object
dữ liệu. Xem ví dụ về sử dụng/trả lại:
createAssociativeArray('key1.key2.key3', {
data1: 1,
data2: 2,
data3: 3
});
// key1: {
// key2: {
// key3: {
// data1: 1,
// data2: 2,
// data3: 3
// }
// }
// }
Phương pháp đơn giản và mạnh mẽ nhất để làm điều đó là gì?
Sử dụng eval không phải là một khả năng.
Những gì tôi đã cố gắng:
function createAssociativeArray(string, object) {
string = string.split('.');
return string.reduce(function(_object, _target, i) {
_object[_target] = (i + 1 === string.length ? object : {});
return _object;
}, {});
}
Nó không tạo ra kết quả mong đợi vì các đối tượng được reseted để {}
.
[JSFiddle]
Bạn đang cố gắng triển khai các không gian tên? Ngoài ra, biến 'i' đến từ đâu? –
@StefanBaiu, một cái gì đó như ... Đó là một 'chỉ số' từ' giảm' (cập nhật). –