[英]Filter an array of objects based on array property containing all values from another array
[英]How to filter an arrayof objects from all elements of another array of object on values of a common property
假设有一个对象数组,例如:
var arr1 = [{t:new Date('2020-09-12'),NO:2},{t:new Date('2020-09-14'),NO2:20}];
var arr2 = [{t:new Date('2020-09-12'),CO:2}];
我想使用 arr2 的元素过滤 arr1 的元素,以便排除具有相同 t 值的元素。 我看到了类似的答案,但对于简单的数组,有人建议使用includes
。 我想知道是否可以使用类似的方法。 我试过:
var arr1 = [{ t: new Date('2020-09-12'), NO: 2 }, { t: new Date('2020-09-14'), NO2: 20 }], arr2 = [{ t: new Date('2020-09-12'), CO: 2 }], res = arr1.filter(f => !arr2.includes(ft)); console.log(res);
但它不起作用。 有什么建议吗? 提前致谢。
你可以在地图arr2
到的时间序列,并用它来从排除时间arr1
使用includes
const arr1 = [ { t: new Date("2020-09-12"), NO: 2 }, { t: new Date("2020-09-14"), NO2: 20 }, ] const arr2 = [{ t: new Date("2020-09-12"), CO: 2 }] const res = arr1.filter( ({ t }) => !arr2.map(({ t }) => t.getTime()).includes(t.getTime()) ) console.log(res)
您可以简单地使用过滤器来获得结果。
var arr1 = [{ t: new Date('2020-09-12'), NO: 2 }, { t: new Date('2020-09-14'), NO2: 20 }], arr2 = [{ t: new Date('2020-09-12'), CO: 2 }], res = arr1.filter(f => arr2.filter(time => time.t.getTime() != ftgetTime()).length); console.log(res);
如果您想使用包含,要建立在您拥有的基础上,您需要有一个更简单的数组或使用不同的函数(如 some )来检查该值是否存在于数组中的任何对象中。
var arr1 = [{t:new Date('2020-09-12'),NO:2},{t:new Date('2020-09-14'),NO2:20}],
var filterDates = [{t:new Date('2020-09-12'),CO:2}].map(v=>v.t),
res = arr1.filter(f => !filterDates.includes(f.t));
或者
var arr1 = [{t:new Date('2020-09-12'),NO:2},{t:new Date('2020-09-14'),NO2:20}],
res = arr1.filter(f => !arr2.some(v=>v.t===f.t));
您可以使用数组的 array.filter 属性使用 t 键过滤掉不相似的对象,例如在此处进行检查 ::
var arr1 = [{t:new Date('2020-09-12'),NO:2},{t:new Date('2020-09-14'),NO2:20}];
var arr2 = [{t:new Date('2020-09-12'),CO:2}];
const uniqueElementsArray = arr1.filter(element => {
// Checking if an element in arr1 is also in arr2
let isDuplicate = arr2.some(e => e.t.getTime() === element.t.getTime())
return !isDuplicate
})
console.log(uniqueElementsArray)
// Would return the array below
// [ { t: 2020-09-14T00:00:00.000Z, NO2: 20 } ]
所述Array.some方法检查在ARR2的元素中的至少一个是否具有相同的时间(t)作为ARR1的当前元素Array.filter是目前。 在此处阅读有关 Array.some 的更多信息
t.getTime()用于将元素的日期 ( t ) 转换为毫秒以比较日期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.