Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Сравнить двумерный массив с одномерным (https://javascript.ru/forum/misc/60898-sravnit-dvumernyjj-massiv-s-odnomernym.html)

x1ds 26.01.2016 17:35

Сравнить двумерный массив с одномерным
 
Подскажите как сравнить 2 разных массива и выводить если совпадение имеется "как на примере" то выводить true
var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
var m2 = [1,2,1,1,5];


либо может как то преобразовывать 1 мерный в 2 мерный

рони 26.01.2016 17:44

x1ds,
:blink: интересно что вы спросили?

x1ds 26.01.2016 17:49

У меня есть 2 массива, мне нужно сравнить их, и если к примеру первый элемент из массива m2, число 1, есть в первом элементе массива m1, то мы возвращаем true . Только мне нужно что бы это было для всех элементов, и если они все совпадут то true, если хоть 1 число не совпадет то false

var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
var m2 = [1,2,1,1,5];

рони 26.01.2016 17:52

x1ds,
теплее ... но также ...ни ... не понятно :(

laimas 26.01.2016 18:22

x1ds, массив m2 заведомо не равен массиву m1[0] уже только потому, что у них разное количество элементов, и не важно при этом есть ли значения m2 среди значений m1[0]. Вы не равенство пытаетесь определить, а вхождения, так? Тогда нужно брать только уникальные значения из массива m2.

x1ds 26.01.2016 18:25

Цитата:

Сообщение от laimas (Сообщение 405111)
x1ds, массив m2 заведомо не равен массиву m1[0] уже только потому, что у них разное количество элементов, и не важно при этом есть ли значения m2 среди значений m1[0]. Вы не равенство пытаетесь определить, а вхождения, так? Тогда нужно брать только уникальные значения из массива m2.

Да все верно, вхождения

laimas 26.01.2016 18:38

Ну и поясните - есть в первом элементе массива m1, то мы возвращаем true . Только мне нужно что бы это было для всех элементов.

Массив m1 имеет 5 элементов, значит есть в первом элементе массива m1 трактуем проверить вхождения значений m2 только первого элемента массива m1, то есть m1[0]. Или же нужно проверять также вхождения значений m2 и в остальных элементах m1, то есть - m1[1], m1[2], m1[3], .... (Только мне нужно что бы это было для всех элементов)?

У вас случайно нет "глубинной связи" между ними? То есть m2[0], как то по логике какой-то задачи связан с m1[0], а m2[1] с m1[1] и т.д.?

рони 26.01.2016 18:38

laimas,
:) что-то в массиве m2 уникальности никакой не вижу ...

x1ds 26.01.2016 18:41

var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
var m2 = [1,2,1,1,5];

Если сравнивать вот эти 2 то тогда true

Если к примеру изменить какой то элемент то тогда false

var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
var m2 = [5,2,1,1,5];

laimas 26.01.2016 18:41

Цитата:

Сообщение от рони
что-то в массиве m2 уникальности никакой не вижу

Я писал "нужно брать только уникальные значения", а не то, что все значения m2 уникальны. Смысл проверять вхождения 1, трижды. Я так думаю, он либо не правильно поясняет задачу, либо не может описать логической связи этих массивов.

Dilettante_Pro 26.01.2016 18:50

laimas,
Ответ по сути задачи, похоже, в предыдущей теме этого топикстартера
http://javascript.ru/forum/misc/6089...mbinacijj.html

x1ds 26.01.2016 18:54

Поясню по другому

Мне нужно сделать тест из 5 вопросов, в каждом вопросе по 3-5 вариантов ответов

Вопрос 1
Что болит:
1.Нога value = 1
2.Рука value = 2
3.Голова value = 3
4.Живот value = 4
5.Нос value = 5

Вопрос 2
Симптомы:
1.Насморк value = 1
2.Кашель value = 2
3.Температура value = 3

Теперь условие при котором будет выводится определенный текст к примеру

Если на вопрос 1 ответили 2 или 4 а на второй ответили 1 то выводим "Вы больны гриппом"
1-2,4 2-1

laimas 26.01.2016 18:57

Цитата:

Сообщение от x1ds
Если сравнивать вот эти 2 то тогда true
Если к примеру изменить какой то элемент то тогда false

Переложив на гинекологию, получим - если двойня, папа в ступоре, если еще не определено, ожидаем. :)

У вас массив m2 содержит 5 элементов, и по стечению расположения звезд на небе и m1 также имеет 5 элементов. Вопрос - значит ли это, что в:

var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
var m2 = [5,2,1,1,5];

если m2[0] есть среди значений m1[0] И m2[1] есть среди значений m1[1] И m2[2] есть среди значений m1[2] И m2[3] есть среди значений m1[3] И m2[4] есть среди значений m1[4], только в этом случае true?

Или как то иначе?

laimas 26.01.2016 19:00

Цитата:

Сообщение от x1ds
Поясню по другому
Мне нужно сделать тест из 5 вопросов, в каждом вопросе по 3-5 вариантов ответов

Вот я об этом и думал, а вы о болях пишите нормально, а массивами не можете передать условий.

Тогда вопрос - это что тест (проверить самого себя) или же это проверка знаний куратором своего ученика? Если первое, то это решать на клиенте, если второе, то эту проверку нужно делать уже только на сервере.

x1ds 26.01.2016 19:05

Попробую графически пояснить что где проверять



Вот только в этом случае true

laimas 26.01.2016 19:08

Цитата:

Сообщение от x1ds
Попробую графически пояснить что где проверять

Уже не надо, ибо это то, о чем я ранее спрашивал. Ответ дайте по поводу "что это", ибо тесты самого себя можно производить и на клиенте, а вот проверка кем-то знаний кого-то, это уже задача севера. Что у вас?

x1ds 26.01.2016 19:12

тесты самого себя

рони 26.01.2016 19:30

x1ds,
:lol: медитируйте
var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
 var m2 = [5,2,1,1,5];
function fn(a, b) {
    return a.every(function(a, i) {
        return a.some(function(a) {
            return a == b[i]
        })
    })
};
alert(fn(m1,m2))
var m2 = [0,2,1,1,5];
alert(fn(m1,m2))
/*или так */
function foo(a, b) {
    return a.every(function(a, i) {
        return !!~a.indexOf(b[i])
    })
};
var m2 = [5,2,1,1,5];
alert(foo(m1,m2))
var m2 = [0,2,1,1,5];
alert(foo(m1,m2))

laimas 26.01.2016 19:38

Ну тогда узнать есть ли вхождение (булево значение) N-го индекса массива m2 в массиве m1[N-го индекса], например так:

!!~m1[N].indexOf(m2[N])


Но вот прочел: Если на вопрос 1 ответили 2 или 4 а на второй ответили 1 то выводим "Вы больны гриппом", и заболел расстройством. Во первых не знал, что если болит рука или живот, это грипп, а во-вторых не похоже что вам нужно true/false, а важно знать номер ответа. И еще, если m2, это номер варианта, который выбрал тестирующийся, то как понять - [1, 0, 0] и ответ 5?

x1ds 26.01.2016 20:20

Цитата:

Сообщение от рони (Сообщение 405131)
x1ds,
:lol: медитируйте
var m1 = [[1, 0, 0],[2, 3, 0],[1,2, 3],[1, 2, 5],[1, 3, 5]];
 var m2 = [5,2,1,1,5];
function fn(a, b) {
    return a.every(function(a, i) {
        return a.some(function(a) {
            return a == b[i]
        })
    })
};
alert(fn(m1,m2))
var m2 = [0,2,1,1,5];
alert(fn(m1,m2))
/*или так */
function foo(a, b) {
    return a.every(function(a, i) {
        return !!~a.indexOf(b[i])
    })
};
var m2 = [5,2,1,1,5];
alert(foo(m1,m2))
var m2 = [0,2,1,1,5];
alert(foo(m1,m2))

Спасибо огромное) То что нужно !


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