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