Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2022, 14:03
Аспирант
Отправить личное сообщение для Judgin Посмотреть профиль Найти все сообщения от Judgin
 
Регистрация: 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'}...];
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2022, 14:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Judgin,
можно данные не простыни и корректные?
Ответить с цитированием
  #3 (permalink)  
Старый 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>
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2022, 16:42
Аспирант
Отправить личное сообщение для Judgin Посмотреть профиль Найти все сообщения от Judgin
 
Регистрация: 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',

        }];
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2022, 17:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Judgin,
все возможные решения и теория указаны здесь Сортировать объект JavaScript по ключу

но для вашего случая, врятли существует решение, оставили бы вы это неблагодарное дело, для этого есть массивы.
Ответить с цитированием
  #6 (permalink)  
Старый 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>
Ответить с цитированием
  #7 (permalink)  
Старый 03.06.2022, 11:43
Аспирант
Отправить личное сообщение для Judgin Посмотреть профиль Найти все сообщения от Judgin
 
Регистрация: 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>';
Ответить с цитированием
  #8 (permalink)  
Старый 03.06.2022, 11:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Judgin,
можно только гадать, с чем у вас проблема ... то что вы пишите никак не проясняет ни ваших данных, ни что вы хотите получить в результате.

кода простыни, а толку?
Ответить с цитированием
  #9 (permalink)  
Старый 03.06.2022, 12:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,148

Judgin,
попробуйте локализовать проблему, два условных массива типа смотри #4

что должно получится в итоге(html) и тоже покороче.
на всякий случай в map есть индекс, может вам его нужно использовать что-бы вывести второй массив?
arrFinal.map(function (item, index)
Ответить с цитированием
  #10 (permalink)  
Старый 05.06.2022, 12:24
Аспирант
Отправить личное сообщение для Judgin Посмотреть профиль Найти все сообщения от Judgin
 
Регистрация: 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>';
		}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить структуру объекта Judgin AJAX и COMET 3 17.05.2022 12:45
Как изменить размер Canvas(самого холста)? Сергей16 Общие вопросы Javascript 2 13.07.2016 21:06
Изменить класс родительского элемента STyLe Общие вопросы Javascript 1 29.05.2014 20:21
как изменить css свойсво нескольких елементов? IIIgun Общие вопросы Javascript 17 12.08.2011 12:20
Как можно изменить URL в адресной строке браузера? балерун Events/DOM/Window 12 17.11.2009 13:08