以下是我的代码。 “ id”将具有相同的值。我想通过多个键过滤数据。过滤没有正确进行。
let myArray = [
{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
},
{
"id": "#prodstck",
"date": "2018-04-24T16:43:42Z"
},
];
let filterArray = [
{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
}
];
const filterFeed = myArray.filter(obj=> filterArray.some((f: any) =>
f.id !== obj.id && f.date !== obj.date
));
谢谢
答案 0 :(得分:1)
类似这样的东西会返回带有16:43:21时间戳的项目。
let myArray = [
{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
},
{
"id": "#prodstck",
"date": "2018-04-24T16:43:42Z"
},
];
let filterArray = [
{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
}
];
const result = myArray.filter(item => {
return filterArray.some(filterItem => item.id === filterItem.id && item.date === filterItem.date)
})
console.log(result);
编辑:将.find更改为.OP最初的版本。
答案 1 :(得分:1)
您的想法正确,只是您的some
条件不正确。应该是:
f.id === obj.id && f.date === obj.date
也就是说,当some
和true
都与以下其中一个匹配时,您希望filter
返回id
(以便date
保留条目)您第二个数组中的条目。
实时示例:
let myArray = [{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
},
{
"id": "#prodstck",
"date": "2018-04-24T16:43:42Z"
},
];
let filterArray = [{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
}];
const filterFeed = myArray.filter(obj => filterArray.some((f/*: any*/) =>
f.id === obj.id && f.date === obj.date
));
console.log(filterFeed);
答案 2 :(得分:0)
您需要同时从回调函数返回,条件将检查是否相等
let myArray = [{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
},
{
"id": "#prodstck",
"date": "2018-04-24T16:43:42Z"
},
];
let filterArray = [{
"id": "#prodstck",
"date": "2018-07-24T16:43:21Z"
}];
const filterFeed = myArray.filter(function(obj) {
return filterArray.some(function(f) {
return f.id === obj.id && f.date === obj.date
})
});
console.log(filterFeed)