Nó muốn được waaay dễ dàng hơn nếu bằng cách nào đó el1-EL4 được kết hợp thành một đối tượng duy nhất, như
var data = []
data[0] = {name:'ronaldo', team: 'europe/spain/realmadrid'}
data[1] = {name:'messi', team: 'europe/spain/barcelona'}
data[2] = {name:'gerald', team: 'europe/england/liverpool'}
data[3] = {name:'unknown english', team: 'europe/england'}
Bằng cách đó bạn có thể ít nhất lặp qua chúng một cách nhanh chóng khi xử lý.
Cũng sẽ hữu ích khi biết tại sao bạn cần phải lưu trữ nó dưới dạng cây JSON. Ý tôi là, không phải tất cả các nút đều giống nhau, phải không? Cấp độ đầu tiên là lục địa, sau đó là quốc gia, sau đó là tên nhóm và lá là cầu thủ bóng đá cá nhân. Đó là một cấu trúc dữ liệu khá khó hiểu và tôi không chắc nó sẽ hữu ích như thế nào. Dù bằng cách nào, nó có thể hữu ích hơn để dịch nó thành một cấu trúc fielded đầu tiên và sau đó tạo ra cây.
Chỉnh sửa: Được rồi, vì vậy tôi nghĩ về nó nhiều hơn một chút và tôi nghĩ có thể một cái gì đó như thế này có thể làm điều đó.
var data = [];
data[0] = {name:'ronaldo', team: 'europe/spain/realmadrid'};
data[1] = {name:'messi', team: 'europe/spain/barcelona'};
data[2] = {name:'gerald', team: 'europe/england/liverpool'};
data[3] = {name:'unknown english', team: 'europe/england'};
var tree = {};
function fillTree(name,steps) {
current = null;
for (var y = 0; y < steps.length; y++) {
if (y==0) {
if (!tree.children||typeof tree.children == 'undefined'){
tree = { text: steps[y], leaf: false, children: [] };
}
current = tree.children;
} else {
current.push({ text: steps[y], leaf: false, children: [] })
current = current[current.length - 1].children;
}
}
current.push({ text: name, leaf: true })
}
for (x=0; x < data.length; x++) {
steps =data[x].team.split('/');
fillTree(data[x].name,steps)
}
Điều này tạo ra đối tượng JavaScript. Tôi để nó cho bạn để chuyển đổi nó thành JSON.
Cập nhật:
Yeah, tôi thấy rằng kịch bản cũ sẽ phải luôn đặt mức kỷ lục trong ở cấp thứ hai ngay cả khi nó đã tồn tại. Đây là mới cải thiện chức năng FillTree:
var tree = {};
function fillTree(name,steps) {
var current = null,
existing = null,
i = 0;
for (var y = 0; y < steps.length; y++) {
if (y==0) {
if (!tree.children||typeof tree.children == 'undefined'){
tree = { text: steps[y], leaf: false, children: [] };
}
current = tree.children;
} else {
existing = null;
for (i=0; i < current.length; i++) {
if (current[i].text === steps[y]) {
existing = current[i];
break;
}
}
if (existing) {
current = existing.children;
} else {
current.push({ text: steps[y], leaf: false, children: [] });
current = current[current.length - 1].children;
}
}
}
current.push({ text: name, leaf: true })
}
Cách đơn giản nhất để chuyển đổi đối tượng này thành JSON, rõ ràng, là sử dụng JSON.stringify(tree)
mặc dù rõ ràng điều này là không thống nhất được hỗ trợ (see the JavaScript JSON Page).
Cảm ơn Jordan, nhưng Châu Âu chỉ nên có 2 trẻ em (Tây Ban Nha và Anh) – user275031
@ Cảm ơn bạn! Nếu bạn có một giải pháp tuyệt vời cho mình, xin vui lòng gửi nó. –
Mã mà tôi đã viết có đầu vào được đưa ra và chính xác tạo ra kết quả mong muốn. Sự khác biệt duy nhất là nó là đầu ra như một cấu trúc JavaScript, mà OP được tự do chuyển đổi sang JSON bằng cách sử dụng bất kỳ phương thức nào họ muốn. Trong trường hợp bạn đang băn khoăn, việc chỉ trích một cách vô tình câu trả lời của người khác không phải là cách tuyệt vời để khiến họ có động cơ trả lời một trong những câu hỏi của bạn. –