用另一个具有多个键的对象数组过滤对象数组

时间:2018-09-03 07:48:00

标签: javascript filter

以下是我的代码。 “ 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
        ));

谢谢

3 个答案:

答案 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

也就是说,当sometrue都与以下其中一个匹配时,您希望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)