У меня есть следующие JsonJavascript, как вернуть массив из карты
var myjson = [{
"files": [
{
"domain": "d",
"units": [
{
"key": "key1",
"type": "2"
},
{
"key": "key2",
"type": "2"
},
{
"key": "key3",
"type": "2"
}]
},
{
"domain": "d1",
"units": [
{
"key": "key11",
"type": "2"
},
{
"key": "key12",
"type": "2"
},
{
"key": "key13",
"type": "2"
}]
}]
},
{
"files": [
{
"domain": "d",
"units": [
{
......
Я хочу, чтобы создать новый массив из этого массива JSON. Длина массива будет числом «единиц» в этом объекте Json.
Поэтому мне нужно извлечь «единицы» и добавить некоторые данные из родительских объектов.
units: [{
domain: "",
type: "",
key: ""
}, {
domain: "",
type: "",
key: ""
},
{
domain: "",
type: "",
key: ""
}
....
];
Я думаю, я, вероятно, может сделать что-то вроде этого:
var res = [];
myjson.forEach(function(row) {
row.files.forEach(function(tfile) {
tfile.units.forEach(function(unit) {
var testEntity = {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
res.push(testEntity);
});
});
});
Но это трудно читать, и выглядит не так хорошо. Я думал сделать что-то вроде:
var RESULT = myjson.map(function(row) {
return row.files.map(function(tfile) {
return tfile.units.map(function(unit) {
return {
domain: tfile.domain,
type : unit.type,
key: unit.key
};
});
});
});
Но это не работает и выглядит не лучше. Есть ли способ сделать это, это работает, может быть, более декларативно. надеялся, что Ramda.js может помочь.
Есть ли какой-нибудь хороший подход вообще, чтобы получить данные из любого вложенного json в удобочитаемом виде?
Реализации что-то вроде:
nestedjson.findAllOnLastlevel(function(item){
return {
key : item.key,
type: type.key,
domain : item.parent.domain}
});
Или как-то сгладить это так все JSON свойства от всех родителей объекта перемещается в Лифс детей. myjson.flatten ("files.units")
jsbin http://jsbin.com/hiqatutino/edit?css,js,console
Большое спасибо
поэтому вам нужен рабочий вариант, который у вас уже есть или хорошо выглядящий вариант, который может быть выполнен с помощью стиля ES6? –
теперь у меня рабочая уродливая версия, но я делаю много таких «вложенных операций json». Думал о правильном подходе. Возможно, даже какой-то общий подход. Предоставленный json I упрощен. Это может быть глубже. Кроме того, новый «=>» недоступен в моем случае. – Ant
Основная проблема заключается в том, чтобы знать, какое свойство итерируется. вы можете дать путь с рекурсивным подходом, но по крайней мере вам нужны свойства для рекомбинации. –