Использование Underscore, простой diff:
var o1 = {a: 1, b: 2, c: 2},
o2 = {a: 2, b: 1, c: 2};
_.omit(o1, function(v,k) { return o2[k] === v; })
Результаты в частях o1
, которые соответствуют, но с разными значениями в o2
:
{a: 1, b: 2}
It 'd различны для глубокого diff:
function diff(a,b) {
var r = {};
_.each(a, function(v,k) {
if(b[k] === v) return;
// but what if it returns an empty object? still attach?
r[k] = _.isObject(v)
? _.diff(v, b[k])
: v
;
});
return r;
}
Как указано в комментариях @Juhana, вышесказанное является только разложением a -> b, а не обратимым (что означает, что дополнительные свойства в b будут игнорироваться). Вместо этого используйте a -> b -> a:
(function(_) {
function deepDiff(a, b, r) {
_.each(a, function(v, k) {
// already checked this or equal...
if (r.hasOwnProperty(k) || b[k] === v) return;
// but what if it returns an empty object? still attach?
r[k] = _.isObject(v) ? _.diff(v, b[k]) : v;
});
}
/* the function */
_.mixin({
diff: function(a, b) {
var r = {};
deepDiff(a, b, r);
deepDiff(b, a, r);
return r;
}
});
})(_.noConflict());
См. http://jsfiddle.net/drzaus/9g5qoxwj/ для полного примера + тесты + mixins
distinct('field_name')
не поддерживается в MySQL. Это только поддержка distinct()
. distinct('field_name')
будет работать только на PostgresSQL . Для более подробной информации, пожалуйста, ознакомьтесь с документацией .
Примеры (после первого будут работать только на PostgreSQL): ( Копия вставлена из документации: )
>>> Author.objects.distinct()
[...]
>>> Entry.objects.order_by('pub_date').distinct('pub_date')
[...]
>>> Entry.objects.order_by('blog').distinct('blog')
[...]
>>> Entry.objects.order_by('author', 'pub_date').distinct('author', 'pub_date')
[...]
>>> Entry.objects.order_by('blog__name', 'mod_date').distinct('blog__name', 'mod_date')
[...]
>>> Entry.objects.order_by('author', 'pub_date').distinct('author')
[...]