Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:查找数组中对某个键具有特定值的所有元素_Javascript_Arrays - Fatal编程技术网

Javascript:查找数组中对某个键具有特定值的所有元素

Javascript:查找数组中对某个键具有特定值的所有元素,javascript,arrays,Javascript,Arrays,我有以下Javascript数组: ARRAY ONE: [ TextRow { v_id: 3000 }, TextRow { v_id: 3001 }, TextRow { v_id: 3002 } ] ARRAY TWO: [ TextRow { s_id: 'S001', v_id: 3000, type: 'control' }, TextRow { s_id: 'S002', v_id: 3001,

我有以下Javascript数组:

ARRAY ONE:
[ TextRow { v_id: 3000 },
  TextRow { v_id: 3001 },
  TextRow { v_id: 3002 } ]

ARRAY TWO:
[ TextRow {
      s_id: 'S001',
      v_id: 3000,
      type: 'control' },
  TextRow {
      s_id: 'S002',
      v_id: 3001,
      type: 'mut' },
  TextRow {
      s_id: 'S003',
      v_id: 3001,
      type: 'mut' },
  TextRow {
      s_id: 'S005',
      v_id: 3001,
      type: 'control' },
  TextRow {
      s_id: 'S008',
      v_id: 3002,
      type: 'mut' } ]
对于数组1中的每个元素,我想得到数组2中所有元素的数组,其中v_id等于数组1中的v_id。例如,对于v_id=3001,我希望获得数组2中的所有元素,其中v_id=3001位于单独的数组中。然而,我不确定什么是完成这项任务的最佳方式,也不确定Javascript是否已经有一些现有函数可以帮助我完成这项任务。我问这个问题是因为我的数组2有1000多个元素,我想知道是否有一种有效的方法来实现这一点,而不仅仅是使用嵌套的for循环遍历数组的元素。非常感谢您提供的任何见解。

您可以在数组1上执行.forEach(或.map),然后在数组2上执行.filter以获得匹配元素

我添加了一个getMatches函数,使逻辑更加清晰

const数组=
[{v_id:3000},
{v_id:3001},
{v_id:3002}];
常数数组二=
[  {
s_id:'S001',
v_id:3000,
类型:'control'},
{
s_id:'S002',
v_id:3001,
类型:'mut'},
{
s_id:'S003',
v_id:3001,
类型:'mut'},
{
s_id:'S005',
v_id:3001,
类型:'control'},
{
s_id:'S008',
v_id:3002,
类型:'mut'}];
函数getMatches(v_id,数组){
返回array.filter(el=>el.v_id===v_id);
}
const result=ARRAY_ONE.map(v=>{
返回{array_one_id:v.v_id,matches:getMatches(v.v_id,array_TWO)};
});

日志(“结果:”,结果)您可以使用.forEach()方法迭代第一个数组

然后,可以使用数组2上的.filter()方法作为forEach的回调函数

你应该有这样的东西:

arrayOne.forEach(elmArr1=>arrayTwo.filter(elmArr2=>elmArr1.v_id==elmArr2.v_id))

如果要在不分组的情况下进行筛选:

const firstArray=
[{v_id:3000},
{v_id:3001},
{v_id:3002}
];
常数二次数组=
[  {
s_id:'S001',v_id:3000,类型:'control'},
{
s_id:'S002',v_id:3001,类型:'mut'},
{
s_id:'S003',v_id:3001,类型:'mut'},
{
s_id:'S005',v_id:3001,类型:'control'},
{
s_id:'S008',v_id:3002,类型:'mut'}
];    
const result=secondArray.filter(f=>
一些(s=>s.v_id==f.v_id));

控制台日志(结果)filter
。看看这个关于如何在javascript中过滤对象的答案:对于ARRAY_ONE.forEach中的函数,如何知道v指的是ARRAY_ONE?当我们使用.map或forEach时,数组的元素被枚举,每个值作为第一个参数传递给回调函数。所以v将被我们映射的数组的每个连续值填充。每个项目的索引将作为第二个参数传递(如果需要的话!)。有关更多信息,请参阅此处的文档:当我们调用.map时,我们将通过回调传递数组的每个元素。因此,如果调用.map(v=>v*2),数组中的每个值都会加倍。