如果您想保留该功能模式,您可能需要添加一个
and
允许您执行多重比较的帮助器:
const compare = cb => (a, b) => a.length === b.length && a.every((el, i) => cb(el, b[i]));
const take = (key, cb) => (a, b) => cb(a[key], b[key]);
const and = (cb1, cb2) => (a, b) => cb1(a, b) && cb2(a, b);
const equals = (a, b) => a === b;
const equal = take("services", compare(
and(
take("service", equals),
take("history", compare(
take("_id", equals)
))
)
))(obj, obj2);
const historyEquals = (a, b) =>
a._id === b._id;
const serviceEquals = (a, b) =>
a.service === b.service &&
a.history.length === b.history.length &&
a.history.every((el, i) => historyEquals(el, b.history[i]));
const objEquals = (a, b) =>
a.services.length === b.services.length &&
a.services.every((el, i) => serviceEquals(el, b.services[i]));