对象动态键值的过滤对象

问题描述 投票:-1回答:1

如何在javaScript或lodash中过滤具有动态键值的对象的对象。

我的数据是:

var names = [
  {
    name: 'c1',
    tags: {
      key1: 'value1-1',
      key2: 'value1-2',
    },
  },
  {
    name: 'c2',
    tags: {
      key1: 'value2-1',
      key2: 'value1-2',
    },
  },
  {
    name: 'c3',
    tags: {
      key3: 'value3-1',
      key4: 'value3-2',
    },
  }
]

且过滤数据为:

var filterData = {
  key3: { 0: 'value3-1' },
  key4: { 0: 'value3-2' }
}

我希望过滤器和之后的过滤器显示如下:

afterFilter = [
      {
        name: 'c3',
        tags: {
          key3: 'value3-1',
          key4: 'value3-2',
        }
      }
    ]
javascript lodash
1个回答
0
投票

如果任务是过滤完全相同的标签:字符串化filterData和基于字符串化标签的过滤器名称

var names = [
  {
    name: 'c1',
    tags: {
      key1: 'value1-1',
      key2: 'value1-2',
    },
  },
  {
    name: 'c2',
    tags: {
      key1: 'value2-1',
      key2: 'value1-2',
    },
  },
  {
    name: 'c3',
    tags: {
      key3: 'value3-1',
      key4: 'value3-2',
    },
  }
]
var filterData = {
  key3: { 0: 'value3-1' },
  key4: { 0: 'value3-2' }
}


var filter = JSON.stringify(Object.fromEntries(Object.entries(filterData).map(x=>[x[0],x[1][0]])))

console.log(
names.filter(({tags})=>JSON.stringify(tags)===filter)
)
© www.soinside.com 2019 - 2024. All rights reserved.