Отсортировать массив по имени статусу и вывести кол-во
Есть массив типа:
[
{"Name1" "Status1"},
{"Name1" "Status1"},
{"Name1" "Status2"},
{"Name2" "Status1"},
{"Name2" "Status2"},
]
Нужно отсортировать его так, что бы выдавало кол-во имя и статус одинаковых элементов
Вот так:
2 х Name1 Status1
1 x Name1 Status2
1 x Name2 Status1
1 x Name2 Status2
Использую Javascript, так же думаю это можно с помощью ramda реализовать вроде.
Как написать сортировку?
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Ну так как я вижу попытки решения
- Создайте другой массив который будет хранить ваш результат.
- В цикле пробегаетесь по исходному и добавляете в результирующий, если такового нет, иначе инкремент количество на совпадении.
- Сортируйте результирующий массив и выводить результат.
Ответ да в JavaScript это можно сделать.
Автор решения: Михаил Камахин
→ Ссылка
Не думаю, что вы что-то поймёте, я думаю, вам нужно самим это написать
function identicalArrays(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (let i = 0; i < arr1.length; i++) {
if (typeof arr1[i] === 'object' ||
typeof arr1[i] === 'boolean' ||
typeof arr1[i] === 'symbol' ||
typeof arr1[i] === 'function' ||
typeof arr1[i] === 'undefined') {
return false;
}
}
for (let i = 0; i < arr1.length; i++) {
if (arr1[i].toString() !== arr2[i].toString()) {
return false
}
}
return true;
}
function mySort(arr) {
const findArr = [];
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (!Array.isArray(item)) {
continue;
}
let copyName = false;
for (let j = 0; j < findArr.length; j++) {
const item1 = findArr[j];
if (identicalArrays(item1.arr, item)) {
copyName = true;
item1.size++;
}
}
if (!copyName) {
pushInFindArr();
}
function pushInFindArr() {
findArr.push({
arr: item,
size: 1
});
}
}
return findArr;
}
function printArr(sortArray) {
let result = '';
sortArray.forEach(item => {
let name = '';
for (let j = 0; j < item.arr.length; j++) {
const item1 = item.arr[j];
name += ` ${item1}`;
}
const str = item.size + ' x ' + name;
// console.log(str);
result += str + '<br>';
});
const div = document.createElement('div');
div.innerHTML = result;
document.body.append(div);
}
const arr = [
["Name1", "Status1"],
["Name1", "Status1"],
["Name1", "Status2"],
["Name2", "Status1"],
["Name2", "Status2"]
];
const sortArray = mySort(arr);
printArr(sortArray);