javascript - using underscore's “difference” method on arrays of objects -
_.difference([], [])
this method works fine when i'm having primitive type data
var = [1,2,3,4]; var b = [2,5,6];
and _.difference(a,b)
call returns [1,3,4]
but in case i'm using object
var = [{'id':1, 'value':10}, {'id':2, 'value':20}]; var b = [{'id':1, 'value':10}, {'id':4, 'value':40}];
doesn't seem work
reason object same content not same objects e.g.
var = [{'id':1, 'value':10}, {'id':2, 'value':20}]; a.indexof({'id':1, 'value':10})
it not return 0 -1 because searching different object
see source code http://underscorejs.org/underscore.js, _.difference
uses _.contains
_.difference = function(array) { var rest = concat.apply(arrayproto, slice.call(arguments, 1)); return _.filter(array, function(value){ return !_.contains(rest, value); }); };
and _.contains
uses indexof
hence not find objects unless point same object.
you can improve underscore _.contains
looping through items , calling compare callback, should able pass difference or contains function or can check this version improves contains methods
Comments
Post a Comment