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 значений. Получается она перебирает массив. Но как ? Идеальный ответ был бы что-то типа: Цитата:
Спасибо. |
|
|
уроки информатики в школе проходили?
сортировки писали? вот там, где в сортировках было написано что-то вроде if(arr[i] < arr[j]) {//..... можно написать if(func(arr[i], arr[j])) {//..... Где func - ваша функция сравнения. и с этого момента можно сравнивать не только числа, но и что угодно, если есть нужная функция |
Цитата:
|
Цитата:
|
А, бывает)
|
Случайная сортировка:
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)); |
Цитата:
а) ваш пост вообще тут не в тему. тут спрашивают и обсуждают вовсе не об этом б) ваша "случайная" сортировка - херня на постном масле, и никуда не годится http://alljs.ru/articles/array/sort#shuffle http://javascript.ru/forum/project/2...a-massiva.html |
Появился второй вопрос. В первом посте.
Спасибо всем за ответы. |
Часовой пояс GMT +3, время: 08:51. |