
02.06.2022, 14:03
|
Аспирант
|
|
Регистрация: 31.05.2021
Сообщений: 32
|
|
Изменить структуру объекта2
Имеется объект такого вида
{4:0 в пользу Танечки: 'https://upload.wikimedia.org/wikipedia/ru/4/48/Chetyre_nol_v_polzu_Tanechki.jpg', 12 могил Ходжи Насреддина: 'https://upload.wikimedia.org/wikipedia/ru/9/90/12_…%81%D1%80%D0%B5%D0%B4%D0%B4%D0%B8%D0%BD%D0%B0.jpg', 12 стульев (фильм, 1971): 'https://upload.wikimedia.org/wikipedia/ru/5/50/1971_12_stuliev.jpg', А был ли Каротин?: 'https://upload.wikimedia.org/wikipedia/ru/a/ac/%D0…%D0%9A%D0%B0%D1%80%D0%BE%D1%82%D0%B8%D0%BD%3F.jpg', А вы любили когда-нибудь?: 'https://upload.wikimedia.org/wikipedia/ru/d/d8/%D0…D0%B0-%D0%BD%D0%B8%D0%B1%D1%83%D0%B4%D1%8C%3F.jpg', А ну-ка, дедушки!: 'https://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Bulgaria.svg' …}
Нужно привести к массиву объектов такого вида (т.е сгруппировать свойства по алфавиту)
[{12 могил Ходжи Насреддина: 'https://upload.wikimedia.org/wikipedia/ru/9/90/12_…%81%D1%80%D0%B5%D0%B4%D0%B4%D0%B8%D0%BD%D0%B0.jpg', 12 стульев (фильм, 1971): 'https://upload.wikimedia.org/wikipedia/ru/5/50/1971_12_stuliev.jpg', 4:0 в пользу Танечки: 'https://upload.wikimedia.org/wikipedia/ru/4/48/Chetyre_nol_v_polzu_Tanechki.jpg'}, {А был ли Каротин?: 'https://upload.wikimedia.org/wikipedia/ru/a/ac/%D0…%D0%9A%D0%B0%D1%80%D0%BE%D1%82%D0%B8%D0%BD%3F.jpg', А вы любили когда-нибудь?: 'https://upload.wikimedia.org/wikipedia/ru/d/d8/%D0…D0%B0-%D0%BD%D0%B8%D0%B1%D1%83%D0%B4%D1%8C%3F.jpg', А ну-ка, дедушки!: 'https://upload.wikimedia.org/wikipedia/commons/9/9a/Flag_of_Bulgaria.svg'}...];
|
|

02.06.2022, 14:10
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Judgin,
можно данные не простыни и корректные?
|
|

02.06.2022, 14:21
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Judgin,
<body>
<script>
const data = [{
'1': '123'
}, {
'ббб': '123'
}, {
'аа': '123'
}, {
'1аб': '123'
}, {
'22': '123'
}];
let order = 1;
const collator = new Intl.Collator(["en", "ru"], {
numeric: true
});
const comparator = (order) => (a, b) => order * collator.compare(
Object.keys(a)[0], Object.keys(b)[0]
);
data.sort(comparator(order))
document.body.append(JSON.stringify(data))
</script>
</body>
|
|

02.06.2022, 16:42
|
Аспирант
|
|
Регистрация: 31.05.2021
Сообщений: 32
|
|
Сообщение от рони
|
Judgin,
<body>
<script>
const data = [{
'1': '123'
}, {
'ббб': '123'
}, {
'аа': '123'
}, {
'1аб': '123'
}, {
'22': '123'
}];
let order = 1;
const collator = new Intl.Collator(["en", "ru"], {
numeric: true
});
const comparator = (order) => (a, b) => order * collator.compare(
Object.keys(a)[0], Object.keys(b)[0]
);
data.sort(comparator(order))
document.body.append(JSON.stringify(data))
</script>
</body>
|
Не работает, у меня структура объекта другая.
const data = [{
'1': '123',
'ббб': '123',
'аа': '123',
'1аб': '123',
'22': '123',
}];
|
|

02.06.2022, 17:42
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Judgin,
все возможные решения и теория указаны здесь Сортировать объект JavaScript по ключу
но для вашего случая, врятли существует решение, оставили бы вы это неблагодарное дело, для этого есть массивы.
|
|

02.06.2022, 18:02
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Проблематика сортировки ключей объекта
Judgin,
<body>
<script>
let data = [{"1":"1","1аб":"2","22":"3","аа":"4","ббб":"5"}]// имеем отсортированный по ключам объект
document.body.append(JSON.stringify(data));//браузер говорит не фига не отсортированный
document.body.append(JSON.stringify(Object.keys(data[0]))); // и даже ключи тоже не отсортированы
</script>
</body>
|
|

03.06.2022, 11:43
|
Аспирант
|
|
Регистрация: 31.05.2021
Сообщений: 32
|
|
Сообщение от рони
|
Judgin,
все возможные решения и теория указаны здесь Сортировать объект JavaScript по ключу
но для вашего случая, врятли существует решение, оставили бы вы это неблагодарное дело, для этого есть массивы.
|
Если решать проблему с помощью массивов, то я не знаю как вывести значения из 2-х массивов одновременно т.е за одну итерацию. Я уже создавал тему насчет этого на форуме. Ведь метод map перебирает только один массив. Как из второго массива вывести в тег <img>?
document.getElementById(movieL).innerHTML = '<h3>'+ arr_RU[k] +'</h3><ul class="category-list clearfix">' + arrFinal.map(function (item) {
return '<li id = '+ k +' class="category-item"><a href="https://ru.wikipedia.org//wiki/'+ item + '">' + item + '</a><img src = ' + ????? + '<div id="btn"><button onclick="openLink(this)" id="btn">Смотреть фильм</button></div></li>';
}).join('') + '</ul>';
|
|

03.06.2022, 11:55
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Judgin,
можно только гадать, с чем у вас проблема ... то что вы пишите никак не проясняет ни ваших данных, ни что вы хотите получить в результате.
кода простыни, а толку?
|
|

03.06.2022, 12:10
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,148
|
|
Judgin,
попробуйте локализовать проблему, два условных массива типа смотри #4
что должно получится в итоге(html) и тоже покороче.
на всякий случай в map есть индекс, может вам его нужно использовать что-бы вывести второй массив?
arrFinal.map(function (item, index)
|
|

05.06.2022, 12:24
|
Аспирант
|
|
Регистрация: 31.05.2021
Сообщений: 32
|
|
Сообщение от рони
|
Judgin,
попробуйте локализовать проблему, два условных массива типа смотри #4
что должно получится в итоге(html) и тоже покороче.
на всякий случай в map есть индекс, может вам его нужно использовать что-бы вывести второй массив?
arrFinal.map(function (item, index)
|
Понял как через индекс выводить второй массив. Но если выводить данные из 2-х массивов, то нужного результата можно добиться если массивы сгруппированы по алфавиту (как в коде ниже). Первый массив я могу сгруппировать нужным образом, но второй массив, который содержит только ссылки, как я понимаю сгруппировать таким образом не получится. Запустив код ниже, вы увидите что должно получится в результате.
let arrTitles = [['aaa', 'abb', 'acc'], ['bbb', 'bcc', 'bdd'], ['ccc', 'cdd', 'cee']];
let arrMovies = [['http://11a.com', 'http://22a.com', 'http://33a.com'], ['http://11b.com', 'http://22b.com', 'http://33b.com'], 'http://11c.com', 'http://22c.com', 'http://33c.com'];
let arrRU = ['А', 'Б', 'В'];
for( k = 0; k < 3; k++) {
id = 'sect'+ k;
movieL = 'moviel' + k;
let section = document.createElement("SECTION");
section.setAttribute("id", id);
document.body.appendChild(section);
let div2 = document.createElement("div");
div2.setAttribute("id", movieL);
div2.className = "movieL"
document.getElementById(id).appendChild(div2);
arrTitles2 = arrTitles[k];
arrMovies2 = arrMovies[k];
document.getElementById(movieL).innerHTML = '<h3>'+ arrRU[k] +'</h3><ul class="category-list clearfix">' + arrTitles2.map(function (el, index) {
return '<li id = '+ k +' class="category-item"><a href="https://ru.wikipedia.org//wiki/'+ el + '">' + el + '</a><img src = '+ arrMovies2[index] +'><div id="btn"><button onclick="openLink(this)" id="btn">Смотреть фильм</button></div></li>';
}).join('') + '</ul>';
}
|
|
|
|