【问题标题】:Compare and Array to an array of objects and return a part of the matched objects与对象数组进行比较和数组,并返回匹配对象的一部分
【发布时间】:2020-09-26 03:58:37
【问题描述】:

下面有一个对象数组

const response = 
[
{
    id: 105,
    label: 'test',
    directories: [ '/api/1/directories/500' ]
  },
  {
    id: 337,
    label: 'test2',
    directories: [ '/api/1/directories/766' ]
  },
  {
    id: 200,
    label: 'test20',
    directories: [ '/api/1/directories/95' ]
  }
]

我有一个名为目录的数组

directories = [ '/api/1/directories/766', '/api/1/directories/95' ]

我正在尝试搜索/过滤响应以仅返回与目录数组中的目录匹配的对象的 ID

所以示例输出可能如下所示,它只是匹配对象的 ID

sampleOut= [337, 200]

【问题讨论】:

标签: javascript


【解决方案1】:

如果有匹配,您可以遍历主数组并推送您想要的属性:

const response = 
[
{
    id: 105,
    label: 'test',
    directories: [ '/api/1/directories/500' ]
  },
  {
    id: 337,
    label: 'test2',
    directories: [ '/api/1/directories/766' ]
  },
  {
    id: 200,
    label: 'test20',
    directories: [ '/api/1/directories/95' ]
  }
]

var directories = [ '/api/1/directories/766', '/api/1/directories/95' ]

var sampleOut = []

response.forEach(function(a) {
  if (directories.indexOf(a.directories[0]) >= 0 ) {
    sampleOut.push(a.id)
  }
})

console.log(sampleOut)

【讨论】:

    【解决方案2】:
    const sampleOut = response.filter(response => directories.includes(response.directories[0]))
        .map(response => response.id);
    

    【讨论】:

      【解决方案3】:

      这可以按如下方式完成:

      const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);
      

      请看下面的可运行代码sn-p。

      const response = [
        {
          id: 105,
          label: 'test',
          directories: [ '/api/1/directories/500' ]
        },
        {
          id: 337,
          label: 'test2',
          directories: [ '/api/1/directories/766' ]
        },
        {
          id: 200,
          label: 'test20',
          directories: [ '/api/1/directories/95' ]
        }
      ];
      
      const directories = [ '/api/1/directories/766', '/api/1/directories/95' ];
      
      const out = response.filter(o => directories.includes(o.directories[0])).map(o => o.id);
      console.log(out)

      【讨论】:

        【解决方案4】:

        您可以使用reduce 并通过indexOf 检查是否存在

        const response = 
        [
        {
            id: 105,
            label: 'test',
            directories: [ '/api/1/directories/500' ]
          },
          {
            id: 337,
            label: 'test2',
            directories: [ '/api/1/directories/766' ]
          },
          {
            id: 200,
            label: 'test20',
            directories: [ '/api/1/directories/95' ]
          }
        ]
        
        directories = [ '/api/1/directories/766', '/api/1/directories/95' ];
        
        var result = response.reduce((acc, item)=>{
        
          if(directories.indexOf(item.directories[0]) > -1){
            acc.push(item.id);
            
          }
          return acc;
        },[]);
        
        console.log(result);

        【讨论】:

        • 我收到 UnhandledPromiseRejectionWarning: TypeError: Cannot read property '0' of undefined at Array.reduce ()
        • 没关系,数组在我填写后首先被声明为空,我得到了正确的数据
        【解决方案5】:

        你可以这样做。

        const response = 
        [
        {
            id: 105,
            label: 'test',
            directories: [ '/api/1/directories/500' ]
          },
          {
            id: 337,
            label: 'test2',
            directories: [ '/api/1/directories/766' ]
          },
          {
            id: 200,
            label: 'test20',
            directories: [ '/api/1/directories/95' ]
          }
        ];
        
        const directories = [ '/api/1/directories/766', '/api/1/directories/95' ];
        
        const res = response.reduce((acc, elem)=>{
          if(directories.includes(elem.directories[0])){
            acc.push(elem.id)
          }
          return acc
        },[]);
        
        console.log(res)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          相关资源
          最近更新 更多