var set1 = [ { "user":'jane', "phoneNo": '01011110010' }, { "user":'kate', "phoneNo": '01010001101', } ]; var set2 = [ { "user":'bob', "phoneNo": '01010101111' }, { "user":'kate', "phoneNo": '01010001101', } ]; var union = function(set1, set2) { return set1.concat(set2).reduce(function(result,value) { result = [].concat(result); return (!result.some(function(match) { return JSON.stringify(match)===JSON.stringify(value); }) ? result.concat(value) : result); }); }; union(set1,set2);
reduce 에 대해 이해하고는 있지만 써먹어보고 싶어서 만들었다.
set1, set2 를 reduce 를 이용해 순서대로 add 하면서
some 으로 중복 내용을 검사하여 없으면 concat 으로 추가.
아니면 자기자신을 반환하는 구조.
최초 result 는 array 가 아닐 수 있으므로 result = [].concat(result) 로 강제로 array로 만드는 것은 salt.
객체간 비교를 stringify로 하는 것은 꼼수.
underscore 류의 union은 정말 deep copy처럼 객체를 다 뒤져서 비교하더라.
댓글
댓글 쓰기