Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Сравнить два массива (https://javascript.ru/forum/events/85577-sravnit-dva-massiva.html)

ureech 28.10.2023 13:38

Сравнить два массива
 
Привет.
var arr1 = [
{'a':1,'b':2},
{'a':3,'b':4}
]

var arr2 = [
{'c':1,'d':5},
{'c':4,'d':4}

]


Можно ли создать условие, что если нет arr1.a==arr2.c, то получить arr1.b?
В данном примере получается arr1.b == 4

voraa 28.10.2023 14:07

var arr1 = [
{'a':1,'b':2},
{'a':3,'b':4}
]
 
var arr2 = [
{'c':1,'d':5},
{'c':4,'d':4}
 
]

const b = arr1.find (a1 => arr2.every (a2 => a2.c != a1.a))?.b;
console.log (b);

ureech 28.10.2023 15:03

voraa,
сенькью вери мач)

ureech 29.10.2023 10:56

К сожалению, видимо тут нельзя использовать ever(), так как выводится только один результат, если таковых совпадений несколько. Придётся наверное с циклами заморачиваться.

voraa 29.10.2023 11:23

Цитата:

Сообщение от ureech
так как выводится только один результат, если таковых совпадений несколько.

А где вы в первом посте говорите про несколько результатов?
Почему нельзя сразу описать всю задачу, а не выдавать ее по кусочкам?
Почему сразу не привести нормальный пример, где результатов несколько?
И почему сразу, в первом же посте, не сказать, что должно быть результатом число, объект, массив чисел, массив объектов?
Кто за вас это должен додумывать?

ureech 29.10.2023 11:55

voraa,
Да конечно вы правы. Никто и не спорит. Но к сожалению не всегда получается делать сразу как надо.

voraa 29.10.2023 12:14

Цитата:

Сообщение от ureech
Придётся наверное с циклами заморачиваться.

Пример нужен. И что должно быть в конечном результате.
Есть еще такие методы, как filter, map...
Во многих случаях методов массивов хватает, что бы самому не городить циклы

ureech 29.10.2023 12:28

var arr1 = [
{'a':1,'b':2},
{'a':3,'b':4},
{'a':2,'b':2},
{'a':1,'b':20},
{'a':4,'b':2},
]

var arr2 = [
{'c':1,'d':5},
{'c':4,'d':4}
]

//На выходе
[{'a':1,'b':2},{'a':1,'b':20},{'a':4,'b':2}]

voraa 29.10.2023 12:30

Цитата:

Сообщение от ureech
//На выходе
[{'a':1,'b':2},{'a':1,'b':20},{'a':4,'b':2}]

Я не понял.
Вы же писали
Цитата:

Сообщение от ureech
если нет arr1.a==arr2.c,

Либо
const b = arr1.filter (a1 => arr2.every (a2 => a2.c != a1.a));


Либо
const b = arr1.filter (a1 => arr2.some (a2 => a2.c == a1.a));


Сами уж как нибудь определитесь, что вам надо

ureech 29.10.2023 12:49

Блин, я уже сам запутался. Тут перебераю разные варианты, сами объекты поменялись и тп.) Плюс к решению самой задачи подошёл с другой стороны. В этом примере, да вы правы нужно на выходе
[{'a':3,'b':4},{'a':2,'b':2}]


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