Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как найти различие между двумя массивами? (https://javascript.ru/forum/offtopic/43511-kak-najjti-razlichie-mezhdu-dvumya-massivami.html)

Maxmaxmaximus4 09.12.2013 03:24

ахаха суууука, оно не схавало ((
var oldArray = [1, 2, 3, 4, 5];
var newArray = [5, 4, 3, 2, 1];
массивы после преобразования не равны и проблема именно не в преобразовании а в данных которые возвращает функция.




Цитата:

Сообщение от l-liava-l
Может запилить что то гибридное.

а что если добавил а мы просмотрели? элементы не обновятся.
а что если он сделал так arr[1000000] = 100;

cyber 09.12.2013 03:48

Maxmaxmaximus4, конечно не схавало, потому что ты изменил так что учитывается порядок и мне кажется оптимальнее менять на основе replace

Maxmaxmaximus4 09.12.2013 03:50

cyber, слушай все мои изменения это то что я добавил i в indexOf()
когда я убираю результат тот же, когда я использую твою функцию результат тот же)

Цитата:

Сообщение от cyber
оптимальнее менять на основе replace

немного не понял, ты к тому что replace менее дорогая операция и нам приемущественно выцеживать её чем ремувы и инсерты?

в принципе есть идейка небольшая как replace так прокачать чтобы вначале он все свои дела делал, чтобы все что можно заменить им, заменялось им.

cyber 09.12.2013 04:15

Maxmaxmaximus4,
какие данные у тебя в массиве лежат ? дом объекты ?

Maxmaxmaximus4 09.12.2013 04:52

Цитата:

Сообщение от cyber
какие данные у тебя в массиве лежат ? дом объекты ?

нет, любые данные, числа, обьекты, что угодно, блин а, ты что не знаешь как ui работает?

<script src='//mychamber.ru/build/ui.js'></script>

<div controller="Ctrl">
  Привет {name}, тебе {age} лет!
</div>

<script>
function Ctrl() {
    name = 'Ашот'
    age = 15
}
</script>



А тут короче надо будет сделать чтобы элемент повторялся столько раз сколько элементов в массиве, и значения элементов массива засовывались в переменную которую мы придумаем, например val

<div controller="Ctrl">
  <div repeat="val in arr">{val}</div>
</div>

<script>
function Ctrl() {
    arr = [1, 2, 3, 4]
}
</script>


и вот этот вот див внутренний повторится столько раз, сколько ячеек в массиве, и в каждом {val} будет иметь разное значение, суть в том чтобы при изменении массива элементы отражали его состояние. можно удалять каждый раз все созданные элементы и создавать новые и перерисовывать, но я хочу отражать только изменения, а для этого надо их отслеживать. все просто =)

Maxmaxmaximus4 09.12.2013 05:05

cyber, блин, и если честно я вообще не понимаю как твой алгоритм работает, ну то есть понимать то понимаю, но не понимаю почему то должно работать и как "учитывать порядок"

DjDiablo 09.12.2013 06:58

Цитата:

Привет Ашот, тебе 15 лет!
ты с лолей на мальчиков переключился ? ))))))))))

Чото дикую хреновину максимус ты придумал :)
Но в целом любопытно. Хотя поиск оптимального решения будет вероятно медленнее чем работа с dom. Вероятно нужно работать не с одним числом а с группами чисел (группы гораздо больше свидетельствуют о структуре чем отдельные числа). Так как последовательности чисел и групп можно объяснить по разному то мы получим дерево вариантов в котором нам придется искать кратчайший путь.

DjDiablo 09.12.2013 09:19

С другой стороны Я не уверен что разные объяснения как либо отражаются на структуре. Ну к примеру две последовательности 567 и 567567 можно объяснить как добавлением 567 слева так и добавлением 567 справа, это равнозначные варианты и выбрать можно любой.

окей если так посмотреть

33 2 567
33 4 567 3 567
здесь нам все равно было ли во втором случае 567 добавлено в конец или в середину

а вот здесь не все равно.
33 2 567 89 2 90
33 4 89 3 90 567

Вродебы 567 встречается и во втором случае.
Но у нас так же встречаются и 89 x 90.
если было добавлено 567 в конец то это три изменения
а если 89 90 в середину это аж четыре.
Вероятно 567 это добавленый элемент а не сохранившийся, так как добавление 567 потребует меньше трансформаций чем его сохранение. Ведь за сохранение трех чисел 567 мы вынуждены заплатить добавление аж 4х (89 x 90).

а вот ситуация по интереснее. В отличии от предыдущего примеру выбирать нужно между множеством обьяснений
1)
33 567 890 2 90 60
33 90 3 890 567 2 890 60
совпали 567 890 (6 совпадений)

2)
33 567 890 2 90 60
33 90 3 890 567 2 890 60
совпали 90 2 90 (5 совпадений)

3)
33 567 890 2 90 60
33 90 3 890 567 2 890 60
совпали 890 2 90 (6 совпадений)

4)
33 567 890 2 90 60
33 90 3 890 567 2 890 60
совпали 90 90 (4 совпадения)

5) ..... еще какие то

Гипотезы 1 и 3 требуют наименьшего числа изменений или можно сказать имеют наибольшее число совпадений между двумя массивами. Блядь, здесь как раз алгоритм Вагнера Фишера или алгоритм Хиршберга справляется :(

http://habrahabr.ru/post/117063/

P.S. 33 60 игнорирую чтобы не отвлекали, а так конечно они тоже участвуют
567 это не пятьсот шисят семь, а 5,6,7. Все числа от 0 до 9

BETEPAH 09.12.2013 09:56

Цитата:

Сообщение от Maxmaxmaximus4
<div controller="Ctrl">

а почему не <div data-controller="Ctrl">?

Maxmaxmaximus4 09.12.2013 12:09

Цитата:

Сообщение от DjDiablo
(группы гораздо больше свидетельствуют о структуре чем отдельные числа)

а я так и делал кстати) у меня в моей реализации было типа "участок с такого то индекса по такой-то - добавлен"

Цитата:

Сообщение от BETEPAH
а почему не <div data-controller="Ctrl">?

потому что припарсинге этот кастомный атрибут controller удаляется и в разметку попадает чистый html, а вообще ты можешь писать data-controller ui-controller ui:controller и.т.п. к тому же если добавят нативный атрибут controller который чо то делает, то когда человек писал приложение он явно имел ввиду именно наш контроллер а не тот нативный. если человек хочет использовать кастомный атрибут и нативный которые имеют одинаковое имя, то куда логичнее у нативным давать префикс чем кастомным так как кастомные встречаются куда чаще. по этому контроллеры человек будет обозначать так controller="Ctrl" а нативный атрибут контролллер так native-controller="true".

ntive-controller="true" заменится просто на controller='true', а controller="Ctrl" просто исчезнет из разметки. ну можно не native-, а nt-, не суть. Просто всегда бесило то что по какой-то неведомой причине люди тучу префиксов городят, по этому и начал писать свою либу, это одна из причин.

Это куда логичнее чем каждый раз городить тучу префиксов и захламлять код.


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