Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Найти одинаковые элементы (объекты) 2-х массивов

Есть 2 массива разной длины, у которых элементы являются объектами. Хотелось бы получить результат в виде массива, с этими элементами. Вот 2 массива:
var arr1 = [{timeFormat: "00:00", timestamp: 1443128400000}, {timeFormat: "00:15", timestamp: 1443129300000}, {timeFormat: "02:15", timestamp: 1443136500000}]; var arr2 = [{timeFormat: "00:00", timestamp: 1443128400000}, {timeFormat: "01:00", timestamp: 1443132000000}, {timeFormat: "02:15", timestamp: 1443136500000}];
http://jsfiddle.net/yq0or6ct/4/ тут я пыталась сравнивать по индексу, на обычный массив все находит, а вот когда объекты в виде элементов - нет. Подскажите как правильно нужно сделать ?


Ответ

function Intersec(arr1, arr2) { var idx = 0, arr3 = []; var tmp = []; // временный массив JSON
for(var i in arr1){ // переводим в JSON tmp.push(JSON.stringify(arr1[i])); } for (var i = 0; i < arr2.length; i++) { idx = tmp.indexOf(JSON.stringify(arr2[i])); // сравниваем в формате JSON if (idx >= 0) arr3.push(arr2[i]); }
return arr3; }
var arr1 = [{timeFormat: "00:00", timestamp: 1443128400000}, {timeFormat: "00:15", timestamp: 1443129300000}, {timeFormat: "02:15", timestamp: 1443136500000}]; var arr2 = [{timeFormat: "00:00", timestamp: 1443128400000}, {timeFormat: "01:00", timestamp: 1443132000000}, {timeFormat: "02:15", timestamp: 1443136500000}];
console.log(JSON.stringify(Intersec(arr1, arr2)));
Идея: чтобы .indexOf() работал, надо чтобы значения были простые - строки, числа. Cравниваем элементы массива на основе строкового представления JSON.

Комментариев нет:

Отправить комментарий