Вообще легкотня, даже сокращу
const getSortedArray = (array, key) => array.sort((a,b) => a[key] - b[key]);
Вообще легкотня, даже сокращу
const getSortedArray = (array, key) => array.sort((a,b) => a[key] - b[key]);
Мой вариант получился посложнее, но рабочий. Все таки в уроках обучения не было таких командб как “const”, “.sort”.
var getSortedArray = function (mass, key) {
for (var i = 0; i < mass.length - 1; i++) {
for (var j = i + 1; j < mass.length; j++) {
if (mass[i][key] > mass[j][key]) {
var swap = mass[i];
mass[i] = mass[j];
mass[j] = swap;
}
}
}
return mass;
}
Добрый день, вижу Ваши сообщения с кодом почти в каждой задаче. Но Ваш код намного короче остальных, почему? Где почитать про это? И почему в курсе не рассказывают об этом?
почитать можно тут и тут.
не рассказывают видимо по той причине, что JS достаточно сложен, а потому, прежде чтобы осваивать его новый синтаксис, нужно освоить ванильный ну и чтобы вы покупали интенсивы
Просьба подсказать , в контексте работы надо данной задачей обнаружил такое несоотвествие. Касаемо объектов, переменная же должна сохранять только ссылку на объект, В приведенном мной примере переменная change стала независимым объектом. Как так?
var obj = {"name":"Ляксандр","age":"15"};
var copy = obj;
obj = "30";
console.log(copy);
console.log(obj);
Объект существует сам по себе, независимо в какую ячейку памяти вы его определите.
Когда пропадает 1ая ссылка obj (в нее записывается примитив - строка “30”), всё еще остается 2ая ссылка copy и объект все еще доступен по ней.
также и с вашей задачей, есть объект
{ "name": "Василий","age": "6" }
сначала он доступен из массива arr
console.log(arr[0]);
потом ему дают вторую ссылку -
let change = arr[0];
потом затирают 1 элемент массива (с индексом 0) с присвоением ему примитива - число 25:
arr[0] = 25; // затёрли основную ссылку
тот самый объект с Василием все еще доступен по ссылке change
, хотя он исчез из массива arr
т.е. объекты существуют сами по себе, пока есть упоминание на них. как только последняя связь обрывается - сборщик мусора выкидывает его из памяти.
по сути также работают и замыкания, т.к. функция это объект
спасибо, дошло
var getSortedArray = function (arrayOfObjects, key) {
var swap;
for (var i = 0; i < arrayOfObjects.length - 1; i ++) {
for (var j = i + 1; j < arrayOfObjects.length; j ++) {
if (arrayOfObjects[j][key] < arrayOfObjects[i][key]) {
swap = arrayOfObjects[i];
arrayOfObjects[i] = arrayOfObjects[j];
arrayOfObjects[j] = swap;
}
}
}
return (arrayOfObjects);
};
На тот случай если тип значения будет ‘string’, а не ‘number’
const getSortedArray = function(array, key) {
return array.sort((a, b) =>
typeof(a[key]) === 'string'
? a[key].localeCompare(b[key])
: a[key] - b[key]
);
}
Объясните, пожалуйста, зачем mass.length - 1
Ведь оно и так работает если не отнимать единицу
чтобы количество итераций уменьшить, потому что самый большой элемент и так помещается в конец, нет смысла его еще раз сравнивать (тем более с undefined, т.к. j будет равно mass.length и такой элемент будет undefined) и упростить сортировку мб. но вообще для сортировки есть метод с колбеком: .sort((a,b) => a[key] - b[key])
Да что вы знаете о решениях посложнее! Вот как я решил эту задачу. Наверное в душе я индус…
var getSortedArray=function(sortArray, keyName){
var age=[];
var min=[];
var end=[];
for(var x=0;x<sortArray.length;x++){
age.push(sortArray[x][keyName]);
}
//переносим ключевые значения в отдельный массив
var min=0;
for(var j=0;j<sortArray.length;j++){
for(var i=0;i<sortArray.length;i++){
if (age[i+1]<age[i]){
min=age[i];
age[i]=age[i+1];
age[i+1]=min;
}
}
//сортируем этот массив
}
for(var z=0;z<sortArray.length;z++){
for(var y=0;y<sortArray.length;y++)
if(sortArray[y]===end[z]){
continue;
}else if(sortArray[z][keyName]===age[y]){
end[y]=sortArray[z];
}
}
//сравниваем ключевые значения со значениями отсортированного//массива, если совпадает, то записываем в новый массив по //индексу. Предварительно вводим проверку на одинаковые //значения.
return end;
}
Красиво написал))))))))))))))
А зачем во 2-ой строчке кода к “mass.length приписывать (- 1)”? Я понимаю что так нужно, но можете пожалуйста объяснить.
Моя уметь цикл и условие. Больше не уметь. Таки придется покупать интенсивы
var getSortedArray = function (arr, nameKey) {
arrValues = [];
for (var i=0; i<arr.length; i++) {
arrValues[i] = arr[i][nameKey];
};
arrValues.sort(function(a, b) { return a - b; });
for (var i=0; i<arr.length; i++) {
for (var j=0; j<arr.length; j++) {
if (arrValues[i] === arr[j][nameKey]) {
arrValues[i] = arr[j];
};
if (arrValues[i] === arrValues[i-1]) {
arrValues[i] = arr[j];
};
};
};
return arrValues;
};
В принципе @Hierumo уже реализовал то же самое (я думал все через стрелочные переделать, но лень)
function getSortedArray(array, key) {
return array.sort((a, b) => a[key] - b[key]);
}
просто переписываем массив
var getSortedArray = function (arr, name){
for (var i = 0; i < arr.length - 1; i++){
for (var j = i+1; j < arr.length; j++){
if (arr[i][name] > arr[j][name]){
arr.push(arr[i]);
arr.splice(i,1);
}
}
}
return arr;
}
var getSortedArray = function (arrayList, nameKey) {
for (var i = 0; i < arrayList.length - 1; i++) {
var minValue = arrayList[i];
for (var j = i + 1; j < arrayList.length; j++) {
if (arrayList[j][nameKey] < arrayList[i][nameKey]) {
minValue = arrayList[j];
var replace = arrayList[i];
arrayList[i] = minValue;
arrayList[j] = replace;
}
}
}
return arrayList;
}
Я стараюсь выполнять задания только на основе полученных знаний и вот что выходит
var getSortedArray = function(arr, key){
for (var i = 0; i < arr.length - 1; i++){
for (var j = 0; j < arr.length - 1 - i; j++){
if(arr[j + 1][key] < arr[j][key]){
var flag = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = flag;
}
}
}
return arr;
};
Что-то я упустил в каких случаях применяется mass.length - 1, а в каких mass.length?