Привет, я пытаюсь преобразовать один файл JSON в формат ниже. Я не могу придумать, как это сделать?
Мой образ мышления неэффективен, поэтому мне нужна помощь в этом вопросе?
Есть ли простой способ сделать это.
Пожалуйста, посмотрите
[
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - Mix",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
}
]
Это результат, которого я ожидаю: Пожалуйста, посмотрите. Есть ли способ добиться этого?
{
"es_MX": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
}
],
"fr_FR": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
}
]
}
Вам также необходимо объяснить, почему язык en_US исчез - и почему все дублируется как есть - и почему K02 - Kiosk Slider - Mix тоже игнорируется.
Я пытаюсь манипулировать ссылкой
в чем проблема? твой код работает



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ну вот:
let source = [ /* your source JSON */ ];
let result = {};
for (let item of source) {
for (let subItem of item.itemsSlider) {
if (!result[subItem.language]) {
result[subItem.language] = [];
}
result[subItem.language].push(subItem);
}
}
Здравствуйте, что бы вы добавили в это решение, чтобы элементы не дублировались?
Вы можете использовать Array::reduce():
const result = data.reduce((r, {itemsSlider}) => (itemsSlider.forEach(item => (r[item.language]??=[]).push(item)), r), {});
console.info(result);<script>
const data = [
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - Mix",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
}
]
</script>Для проверки дубликата вы можете использовать includes в JavaScript, вот так
let source = [{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - EN",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "fr_FR"
}
]
},
{
"nid": "61629",
"title": "K02 - Kiosk Slider - Mix",
"itemsSlider": [
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "es_MX"
},
{
"nid": "61626",
"status": "1",
"titleNode": "01Additional Suitcase - EN",
"language": "en_US"
}
]
}]
let result = {};
let duplicates = {};
for (let item of source) {
for (let subItem of item.itemsSlider) {
if (!result[subItem.language]) {
result[subItem.language] = [];
}
if (!duplicates[subItem.language]) {
duplicates[subItem.language] = [];
}
if (!duplicates[subItem.language].includes(subItem.nid)) {
duplicates[subItem.language].push(subItem.nid);
result[subItem.language].push(subItem);
}
}
}
console.info(result)
i am trying to manipulate- ты забыл показать, как ты пытаешься это сделать?