Javascript 数组方法来匹配两个数组中的值并返回一个过滤数组

Javascript 数组方法来匹配两个数组中的值并返回一个过滤数组,javascript,arrays,Javascript,Arrays,我正在尝试确定获取MongoDB集合中所需数据所需的.filter或.some的组合 首先,我有一个docs数组,看起来像这样: let docs = [ { _id: '5ba39a12179b771820413ad8', branches: [ { _id: '3nc26645121f0613be08167r', name: 'New York' }, { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },

我正在尝试确定获取MongoDB集合中所需数据所需的.filter或.some的组合

首先,我有一个docs数组,看起来像这样:

let docs = [
 { _id: '5ba39a12179b771820413ad8',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
     { _id: '2hc26648121f0613be081862', name: 'Seattle' },
     { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
     { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' },
{ _id: '3ya39a12179b771820413af5',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '5ac26645121f0613be08145d', name: 'Miami' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 },
{ _id: '2sa39a12179b771820413gy4',
  branches:
   [ { _id: '1rd26645121d5613be08167h', name: 'Denver' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 }
];
 let filterValues = ["5ac26645121f0613be08145d", "7ju2664a121f0613be08186e"];
 [
     { _id: '5ba39a12179b771820413ad8',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
         { _id: '2hc26648121f0613be081862', name: 'Seattle' },
         { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
         { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' },
    { _id: '3ya39a12179b771820413af5',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '5ac26645121f0613be08145d', name: 'Miami' },
         { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' 
     }
 ];
我有一个传入的用户值数组,这些值是ID,如下所示:

let docs = [
 { _id: '5ba39a12179b771820413ad8',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
     { _id: '2hc26648121f0613be081862', name: 'Seattle' },
     { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
     { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' },
{ _id: '3ya39a12179b771820413af5',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '5ac26645121f0613be08145d', name: 'Miami' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 },
{ _id: '2sa39a12179b771820413gy4',
  branches:
   [ { _id: '1rd26645121d5613be08167h', name: 'Denver' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 }
];
 let filterValues = ["5ac26645121f0613be08145d", "7ju2664a121f0613be08186e"];
 [
     { _id: '5ba39a12179b771820413ad8',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
         { _id: '2hc26648121f0613be081862', name: 'Seattle' },
         { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
         { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' },
    { _id: '3ya39a12179b771820413af5',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '5ac26645121f0613be08145d', name: 'Miami' },
         { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' 
     }
 ];
现在我要写的是一个查询,它将返回一个新的
docs
数组,该数组只包含
filterValues
数组中的ID与每个文档根上的
branchs
属性(数组)中找到的ID相匹配的文档

在我在这里提供的示例中,生成的数组应该包含原始
docs
数组中的3个文档中的2个,具体来说,前两个,因为它们都包含在各自
分支
数组中传入的至少一个ID,即从我的文档数据分配给Charlotte和Miami的ID

有没有一种方法可以使用
.filter
includes
,或者
。一些
,或者一些组合来编写

为清楚起见,最终过滤结果应如下所示:

let docs = [
 { _id: '5ba39a12179b771820413ad8',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
     { _id: '2hc26648121f0613be081862', name: 'Seattle' },
     { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
     { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' },
{ _id: '3ya39a12179b771820413af5',
  branches:
   [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
     { _id: '5ac26645121f0613be08145d', name: 'Miami' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 },
{ _id: '2sa39a12179b771820413gy4',
  branches:
   [ { _id: '1rd26645121d5613be08167h', name: 'Denver' },
     { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
  updatedAt: '2018-09-20T13:01:06.709Z',
  createdAt: '2018-09-20T13:01:06.709Z' 
 }
];
 let filterValues = ["5ac26645121f0613be08145d", "7ju2664a121f0613be08186e"];
 [
     { _id: '5ba39a12179b771820413ad8',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '3fc26645121f0613be08185d', name: 'Los Angeles' },
         { _id: '2hc26648121f0613be081862', name: 'Seattle' },
         { _id: '7jc2664a121f0613be081869', name: 'Chicago' },
         { _id: '7ju2664a121f0613be08186e', name: 'Charlotte' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' },
    { _id: '3ya39a12179b771820413af5',
      branches:
       [ { _id: '3nc26645121f0613be08167r', name: 'New York' },
         { _id: '5ac26645121f0613be08145d', name: 'Miami' },
         { _id: '5ac2664a121f0613be08154s', name: 'Sacramento' } ],
      updatedAt: '2018-09-20T13:01:06.709Z',
      createdAt: '2018-09-20T13:01:06.709Z' 
     }
 ];
如果你只是做你认为你想做的事情呢


如果你只是做你认为你想做的事情怎么样。

奇怪的是,你自己还没有实现这一点,因为你已经提出了应该使用的工具。。。嗯,差不多了

首先,您需要根据条件获取
文档的子集,以及
.filter
为此设计的内容,因此

var filteredDocs = docs.filter(doc =>
    // here we need an expression of whether the doc.branches contains an id from filterValues
)
接下来,您必须找到
文档
分支
是否具有来自
过滤器值
的id,
。分支
是一个数组,因此
。一些
适用于此:

var filteredDocs = docs.filter(doc =>
    doc.branches.some(branch =>
        // here an expression should check whether branch._id is among filterValues
    )
)
最后,您需要检查
分支。_id
是否属于
过滤器值
,最简单的方法是使用
.includes
(您也可以使用
。一些
,但这样做没有意义,因为id是..唯一的):

您可以将其用作一行文字,这一行文字更难阅读:

var filteredDocs = docs.filter(doc => doc.branches.some(branch => filterValues.includes(branch._id)))
在控制台中尝试此操作将显示结果(请注意,
docs
的post语法不正确):


奇怪的是,考虑到您已经提出了应该使用的工具,您还没有自己实现它。。。嗯,差不多了

首先,您需要根据条件获取
文档的子集,以及
.filter
为此设计的内容,因此

var filteredDocs = docs.filter(doc =>
    // here we need an expression of whether the doc.branches contains an id from filterValues
)
接下来,您必须找到
文档
分支
是否具有来自
过滤器值
的id,
。分支
是一个数组,因此
。一些
适用于此:

var filteredDocs = docs.filter(doc =>
    doc.branches.some(branch =>
        // here an expression should check whether branch._id is among filterValues
    )
)
最后,您需要检查
分支。_id
是否属于
过滤器值
,最简单的方法是使用
.includes
(您也可以使用
。一些
,但这样做没有意义,因为id是..唯一的):

您可以将其用作一行文字,这一行文字更难阅读:

var filteredDocs = docs.filter(doc => doc.branches.some(branch => filterValues.includes(branch._id)))
在控制台中尝试此操作将显示结果(请注意,
docs
的post语法不正确):


以下是您正在尝试做的工作示例:

const data=[{u id:“5ba39a12179b771820413ad8”,分支:[{u id:“3nc26645121f0613be08167r”,名称:'纽约',{u id:“3fc26645121f0613be08185d”,名称:'洛杉矶',{u id:“2hc26648121f0613be081862”,名称:'西雅图',{id:“7jc2664a121f0613be081869”,名称:'芝加哥',{id:'芝加哥',{u id:'夏洛特:'2664JU21F0613BE08E'],更新日期:“2018-09-20T13:01:06.709Z”,创建日期:“2018-09-20T13:01:06.709Z”{u id:“3ya39a12179b771820413af5”,分支机构:[{u id:“3nc26645121f0613be08167r”,名称:“纽约”},{u id:“5ac26645121f0613be08145d”,名称:“迈阿密”},{u id:“5ac2664a121f0613be08154s”,名称:“萨克拉门托”},更新日期:“萨克拉门托:2018-T1709Z:“2018-09-20T13:01:06.709Z”{id:“2sa39a12179b771820413gy4”,分支机构:[id:“1rd26645121d5613be08167h”,名称:'丹佛'},{id:“5ac2664a121f0613be08154s”,名称:'萨克拉门托'},更新日期:“2018-09-20T13:01:06.709Z”,创建日期:“2018-09-20T13:01:06.709Z”]
常数VAL=[“5ac26645121f0613be08145d”,“7ju2664a121f0613be08186e”]
const result=data.filter(x=>x.branchs.some(y=>vals.includes(y.\u id)))

console.log(result)
以下是您尝试执行的工作示例:

const data=[{u id:“5ba39a12179b771820413ad8”,分支:[{u id:“3nc26645121f0613be08167r”,名称:'纽约',{u id:“3fc26645121f0613be08185d”,名称:'洛杉矶',{u id:“2hc26648121f0613be081862”,名称:'西雅图',{id:“7jc2664a121f0613be081869”,名称:'芝加哥',{id:'芝加哥',{u id:'夏洛特:'2664JU21F0613BE08E'],更新日期:“2018-09-20T13:01:06.709Z”,创建日期:“2018-09-20T13:01:06.709Z”{u id:“3ya39a12179b771820413af5”,分支机构:[{u id:“3nc26645121f0613be08167r”,名称:“纽约”},{u id:“5ac26645121f0613be08145d”,名称:“迈阿密”},{u id:“5ac2664a121f0613be08154s”,名称:“萨克拉门托”},更新日期:“萨克拉门托:2018-T1709:2018-09-20T13:01:06.709Z“,{id:“2sa39a12179b771820413gy4”,分支机构:[id:“1rd26645121d5613be08167h”,名称:'丹佛',{id:“5ac2664a121f0613be08154s”,名称:'萨克拉门托',更新日期:“2018-09-20T13:01:06.709Z”,创建日期:“2018-09-20T13:01:06.709Z”]
常数VAL=[“5ac26645121f0613be08145d”,“7ju2664a121f0613be08186e”]
const result=data.filter(x=>x.branchs.some(y=>vals.includes(y.\u id)))
console.log(结果)
let docs=[{u id:“5ba39a12179b771820413ad8”,分支机构:[{u id:“3NC26645121F0613BE008167R”,名称:'纽约',{u id:“3FC26645121F0613BE008185D”,名称:'洛杉矶',{u id:“2HC26648121F0613BE0081862”,名称:'西雅图',{id:“7JC4A121F0613BE0081869”,名称:'芝加哥',{id:“7HC2664A121F0613BE0081862”,夏洛特:',更新日期:“2018-09-20T13:01:06.709Z”,创建日期: