Есть 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.
Комментариев нет:
Отправить комментарий