#javascript #arrays #json #object #ecmascript-6
Вопрос:
Итак, у меня есть этот объект:
{ "images": [ { "key": "ASDV1-01.jpg", "image_location": "image1.jpg", "data": { "documentid": "CE44DBAC-59B2-4178-8392-0141FB2F58DF", "scandate": "Feb 1 2018 12:05PM", "F08": "1", "F09": "", "F10": "101076", "F11": "" }, "crops": { "F08": { "rectangle": { "left": 690, "top": 2111, "width": 597, "height": 121 } }, "F09": {}, "F10": { "rectangle": { "left": 653, "top": 821, "width": 653, "height": 243 } }, "F11": {} } }, { "key": "ASDV1-01.jpg", "image_location": "image.png", "crops": { "F05": { "rectangle": { "left": 0, "top": 808, "width": 624, "height": 243 } } }, "metadata": [ { "name": "colors", "data": { "dimensions": { "width": 2000, "height": 2600 }, "coordinates": { "width": { "x": { "lat": 4, "long": [12, 345] }, "y": { "lat": { "x" : [12,345], "y": "234" }, "long": 123 } } } } } ] }, { "key": "ASDV1-02.jpg", "image_location": "image.png" } ] }
и я хочу поменять местами ключи со значениями, чтобы это выглядело примерно так:
"ASDV1-01.jpg": "key", "image.jpg": "image_location", "data": { "CE44DBAC-59B2-4178-8392-0141FB2F58DF": "documentid", "Feb 1 2018 12:05PM": "scandate", "1": "F08", "101076": "F10",
Это мой код, но он не работает. Я продолжал пытаться использовать определенные функции javascript и просто не могу этого понять. Кроме того, я хотел бы отобразить результат в виде строки JSON. Можете ли вы дать мне какие-либо подсказки о том, как это сделать?
function swap(json){ var ret = {}; for(var key in json){ ret[json[key]] = key; } return ret; } var result = swap(data) console.log(JSON.stringify(result, null, 2));
Комментарии:
1. Почему ты хочешь это сделать?
"ASDV1-01.jpg": "key"
в этом нет никакого смысла.2. Что произойдет, если у вас есть массив или объект в качестве значения?
3. @Andy Часто бывает интересно получить доступ к ключу из значения
4. Почему вы хотите это сделать (если бы мы поняли, что могли бы предложить лучшее решение)? И что не так с текущим кодом (вы не объяснили, как он выходит из строя)?
5. Объекты могут иметь только строки в качестве свойств, и вы также хотите, чтобы это было рекурсивно (поменять местами все вложенные свойства?) вам нужно добавить пояснения.
Ответ №1:
измените свою функцию на рекурсивную, как это, я думаю, это вам поможет
let data = { "images": [{ "key": "ASDV1-01.jpg", "image_location": "image1.jpg", "data": { "documentid": "CE44DBAC-59B2-4178-8392-0141FB2F58DF", "scandate": "Feb 1 2018 12:05PM", "F08": "1", "F09": "", "F10": "101076", "F11": "" }, "crops": { "F08": { "rectangle": { "left": 690, "top": 2111, "width": 597, "height": 121 } }, "F09": {}, "F10": { "rectangle": { "left": 653, "top": 821, "width": 653, "height": 243 } }, "F11": {} } }, { "key": "ASDV1-01.jpg", "image_location": "image.png", "crops": { "F05": { "rectangle": { "left": 0, "top": 808, "width": 624, "height": 243 } } }, "metadata": [{ "name": "colors", "data": { "dimensions": { "width": 2000, "height": 2600 }, "coordinates": { "width": { "x": { "lat": 4, "long": [12, 345] }, "y": { "lat": { "x": [12, 345], "y": "234" }, "long": 123 } } } } }] }, { "key": "ASDV1-02.jpg", "image_location": "image.png" } ] } let ret = {}; function swap(json) { for (var key in json) { if (typeof json[key] === "object") { swap(json[key]) } else { ret[json[key]] = key; } } } swap(data) console.log(ret);