Tôi có một tập dữ liệu chứa tên biến gạch dưới (_). Chẳng hạn như dưới đây:
const data = {
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2'
}
Tôi muốn chia chúng thành đối tượng / mảng lồng nhau, Dưới đây là kết quả tôi muốn.
{
m: {
name: "my name",
address: "my address"
},
p: {
"1": {category: 'cat 1', name: 'name 1'},
"2": {category: 'cat 2', name: 'name 2'}
}
}
Làm thế nào tôi có thể viết một phương pháp đệ quy để đạt được nó thay vì mã hóa cứng? Có lẽ nó nên cho phép xử lý các đối tượng lồng nhau sâu hơn, chẳng hạn như "p_2_one_two_carget: 'value'" vào p: {2: {one: {hai: category: 'value'}}}
var data ={
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2',
p_2_contact: '1234567',
k_id: 111,
k_name: 'abc'
}
var o ={};
Object.keys(data).forEach(key => {
var splited = key.split(/_(.+)/);
if (!o[splited[0]]) {
o[splited[0]] = {};
}
var splited1 = splited[1].split(/_(.+)/);
if (splited1.length < 3) {
o[splited[0]][splited[1]] = data[key];
} else {
if (!o[splited[0]][splited1[0]]){
o[splited[0]][splited1[0]] = {};
}
o[splited[0]][splited1[0]][splited1[1]] = data[key];
}
});
console.log(o);
m
là một đối tượng đơn giản, không phải là một mảng các đối tượng thuộc tính đơn.) Những kết quả này có vẻ hợp lý hơn nhiều so với đầu ra mẫu của bạn. Đó có phải là những gì bạn thực sự muốn?