#javascript
#javascript
Вопрос:
У меня есть json, подобный этому:
data=[ { target: 'a', source: 'a' }
, { target: 'a', source: 'b' }
, { target: 'b', source: 'c' }
, { target: 'c', source: 'd' }
];
но я хочу:
data= { "target": "a", "children": [
{ "target": "b", "children": [
{ "target": "c", "children": [
{ "target": "d" } ] } ] };
как вы пишете это в js
Комментарии:
1. Вы уже «написали это на JS», так в чем же ваш актуальный вопрос?
2. JSON расшифровывается как «Объектная нотация Java Script»
3. вы должны сделать обратную связь
4. Извините за поздний ответ, мой интернет не работал в течение 2 дней. Я думаю, что я недостаточно ясно объясняю, я хочу написать Java-скрипт для форматирования данных в виде дерева
Ответ №1:
Не уверен, что это наилучший возможный код, но он работает
const
data = [ { target: 'a', source: 'a' }
, { target: 'a', source: 'b' }
, { target: 'b', source: 'c' }
, { target: 'c', source: 'd' }
];
let
CurKey = '',
CurrentChild = null,
result = null;
data.forEach( elm => {
if (elm.target === elm.source)
{
CurKey = elm.target;
result = { "target": CurKey, "children": [] };
CurrentChild = result.children;
}
else if (elm.target === CurKey)
{
CurKey = elm.source;
if (data.findIndex(ef=>ef.target===elm.source) >0 )
{
let newElm = { "target": CurKey, "children": [] };
CurrentChild.push(newElm)
CurrentChild = newElm.children;
}
else
{
let newElm = { "target": CurKey };
CurrentChild.push(newElm)
CurrentChild = null;
CurKey = null;
}
}
});
console.log(JSON.stringify(result));
Второй случай, без { target: ‘a’, source: ‘a’ } :
const
data = [ { target: 'a', source: 'b' }
, { target: 'b', source: 'c' }
, { target: 'c', source: 'd' }
];
let
CurKey = '',
CurrentChild = null,
result = null;
data.forEach( elm => {
if (CurKey === '')
{
CurKey = elm.target;
result = { "target": CurKey, "children": [] };
CurrentChild = result.children;
}
if (elm.target === CurKey)
{
CurKey = elm.source;
if (data.findIndex(ef=>ef.target===elm.source) >0 )
{
let newElm = { "target": CurKey, "children": [] };
CurrentChild.push(newElm)
CurrentChild = newElm.children;
}
else
{
let newElm = { "target": CurKey };
CurrentChild.push(newElm)
CurrentChild = null;
CurKey = null;
}
}
});
console.log(JSON.stringify(result));
Комментарии:
1. Похоже, это то, что мне нужно, я собираюсь попробовать. Спасибо
2. Еще один вопрос, что произойдет, когда target: ‘a’, source: ‘a’ отсутствует. будет ли это работать? Потому что я просто понимаю, что в моем наборе данных нет такого случая
3. Я нашел решение для этого второго случая, проверьте его в моем ответе 🙂
Ответ №2:
var arr_1 = [];
var arr_2 = [];
var arr_3 = [];
var json = {};
var json_2 = {};
var json_3 = {};
var json_4 = {};
arr_3.push(json_4);
json_3.target = 'c';
json_3.children = arr_3;
arr_2.push(json_3);
json_2.target = 'b';
json_2.children = arr_2;
arr_1.push(json_2);
json.target = 'a';
json.children = arr_1;
console.log(json);
Динамическое добавление в JSON json_2['target'] = 'c';
Комментарии:
1. есть ли способ сделать его динамическим, вместо того, чтобы жестко кодировать его в
2. @Lin Tong Да, если я вас правильно понимаю. Вам нужен пример или вы уже получили ответ?