繁体   English   中英

如何根据公共属性的值从另一个对象数组的所有元素中过滤一个对象数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM