Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Array.sort(function). Объясните плиз. (https://javascript.ru/forum/misc/27827-array-sort-function-obyasnite-pliz.html)

mnavalny 26.04.2012 09:50

Array.sort(function). Объясните плиз.
 
------------------Вопрос №2. Ответ получен------------------------
Ещё раз напоминаю, что я дно в JS, не пинайте меня сильно.
Сейчас читаю Девида Фланагана. И пытаюсь решать примеры из книжки. Вот появлися вопрос.

Задача следующая:
* Copy the enumerable properties of p to o, and return o.
* If o and p have a property by the same name, o's property is left alone.
* This function does not handle getters and setters or copy attributes.

var o = {same: "O obj", name: "O obj", addO: "add_O"};
var p = {same: "P obj", addP: "add_P", name: "P obj"};

function merge(o,p) {
for(prop in p) { // For all props in p.
if (o.hasOwnProperty[prop]) continue; // Except those already in o.
o[prop] = p[prop]; // Add the property to o.
}
return o;
}

console.log (merge(o,p));


Объекты добавил я. Сама функция взята из книжки.
Вопрос: почему property "same" объекта О имеет value объекта Р ?
Тоже самое произойдет и с property "name", если её сделать "name1" для обоих объектов.


------------------Вопрос №1. Ответ получен------------------------
Сразу честно признаюсь - я дно в JS, поэтому если вопрос уже обсуждался 100500 раз - дайте линк, и не закрывайте топик хотя бы дня 3.

var compareStringLength = function (stringone, stringtwo) {
    return stringone.length - stringtwo.length;
};
var myStringArray = ["aaaa","z","xxxxxx","s","helloGYs"];
myStringArray.sort(compareStringLength);
console.log(myStringArray);


Result: [ 'z', 's', 'aaaa', 'xxxxxx', 'helloGYs' ]

То есть у нас массив отсортирован по возростанию кол-ва букв в слове.

Вопрос: объясните как это работает. То что я понимаю сейчас: идёт сортировка с помощью функции которая возвращает результат вычитания 2 значений. Получается она перебирает массив. Но как ?
Идеальный ответ был бы что-то типа:


Цитата:

1. "z" - "s" = 0;
2. 0 записывается в myStringArray[0] на соответствующую позицию. (я понимаю что 0 скорее всего никуда не пишется, но просто хочется понять логику)
3. итд итп

Спасибо.

DreamTheater 26.04.2012 09:58

https://developer.mozilla.org/en/Jav...cts/Array/sort

trikadin 26.04.2012 10:21

Array/sort

Gvozd 26.04.2012 11:13

уроки информатики в школе проходили?
сортировки писали?
вот там, где в сортировках было написано что-то вроде
if(arr[i] < arr[j]) {//.....

можно написать
if(func(arr[i], arr[j])) {//.....

Где func - ваша функция сравнения.
и с этого момента можно сравнивать не только числа, но и что угодно, если есть нужная функция сортировки сравнения.

trikadin 26.04.2012 11:35

Цитата:

Сообщение от Gvozd
если есть нужная функция сортировки

Скорее, функция сравнения.

Gvozd 26.04.2012 11:43

Цитата:

Сообщение от trikadin
Скорее, функция сравнения.

так и есть - опечатался

trikadin 26.04.2012 11:54

А, бывает)

Questioner 01.05.2012 21:13

Случайная сортировка:
function randsort(arr) {
    return arr.sort(function(a, b) {return Math.random() - 0.5});
}

Приер использования:
function randsort(arr) {
    return arr.sort(function(a, b) {return Math.random() - 0.5});
}
var a = "abcdefghijklmnopqrstuvwxyz".split("");
alert(randsort(a));
alert(randsort(a));
alert(randsort(a));

Gvozd 01.05.2012 21:21

Цитата:

Сообщение от Questioner
Случайная сортировка:

откуда блять такие мудаки берутся?
а) ваш пост вообще тут не в тему. тут спрашивают и обсуждают вовсе не об этом
б) ваша "случайная" сортировка - херня на постном масле, и никуда не годится
http://alljs.ru/articles/array/sort#shuffle
http://javascript.ru/forum/project/2...a-massiva.html

mnavalny 29.09.2012 10:40

Появился второй вопрос. В первом посте.
Спасибо всем за ответы.


Часовой пояс GMT +3, время: 23:59.