我有一个像这样的收藏
const collection = [{url: '/string/'}, {url: '/string-2/'}]和string的array
const strings = ['/string/']我试着在这两者之间做出区别,结果是
const difference = [{url: '/string-2/'}]我试着用lodash _.filter
const difference = _.filter(collection, obj => strings.every(url => url !== obj.self));但它不起作用。我尝试过使用._partition,但它确实返回了多个数组,而我只希望有一个没有对象的集合
发布于 2019-10-17 19:24:22
通过使用.filter()并检查当前对象的url是否包含在strings数组中,您可以在不使用lodash的情况下完成此操作,如下所示:
const collection = [{url: '/string/'}, {url: '/string-2/'}];
const strings = ['/string/'];
const difference = collection.filter(({url}) => strings.includes(url));
console.log(difference);
..。或者,如果每个url都是唯一的,则更有效的方法是创建一个Map,其中映射中的每个键都是一个指向您的对象的url。然后对strings数组执行.map()操作,如下所示:
const collection = [{url: '/string/'}, {url: '/string-2/'}];
const strings = ['/string/'];
const collection_map = new Map(collection.map(obj => [obj.url, obj]));
const difference = strings.map(str => collection_map.get(str));
console.log(difference);
通过使用带有_.includes()的_.filter()方法,可以应用与上面相同的逻辑,如下所示:
const collection = [{url: '/string/'}, {url: '/string-2/'}];
const strings = ['/string/'];
const difference = _.filter(collection, obj => _.includes(strings, obj.url));
console.log(difference);<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>
发布于 2019-10-17 19:31:16
const collection = [{url: '/string/'}, {url: '/string-2/'}]
const strings = ['/string/']
result = _.differenceWith(collection, strings, (a, b) => a.url === b)
console.log(result) // [ { url: '/string-2/' } ]发布于 2019-10-17 19:32:12
您可以使用简单的Array.prototype.includes() & Array.prototype.filter()完成此操作,如下所示:
const collection = [{url: '/string/'}, {url: '/string-2/'}];
const strings = ['/string/'];
const difference = collection.filter(c => strings.includes(c.url) );
console.log(difference)https://stackoverflow.com/questions/58431441
复制相似问题