javascript - 过滤对象的对象动态键值
问题描述
如何在 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',
}
}
]
解决方案
第一个 console.log 段:
- 过滤器在标签中包含键/值
第二个 console.log 段:
- 完全相同的键/值集(也检查它们的长度相同)
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: 'value3-1',
key4: 'value3-2'
}
names.push({
name: 'c4',
tags: {
key1: 'pew',
key2: 'pew pew',
key4: 'value3-2',
key3: 'value3-1'
}
})
// filter for if _contains_ key/values of filterData
console.log(
names.filter(({
tags
}) => Object.entries(filterData).every(([k, v]) => tags[k] === v))
)
// filter for only exact same key/values of filterData order-insensitive
const count = Object.keys(filterData).length
console.log(
names.filter(
({
tags
}) =>
(tags =>
tags.length === count && tags.every(([k, v]) => filterData[k] === v))
(Object.entries(tags))
)
)
推荐阅读
- thymeleaf - 为什么“href”和“th:href”同时存在?
- python - 处理缺失值
- javascript - Angular如何按其对象的顺序发布数据
- jquery-ui - jQueryUI 可排序以在响应式表中拖放列
- django - 如何在 django rest 框架中修复“找不到错误路径”
- python - 如何使用 msmpi 在 Windows 10 上安装 mpi4py
- mysql - 如何修复节点 js 的 mysql 查询转义问题?
- c++ - C++ 指针和结构
- file - 实例化导入的本地存储的 .obj 文件
- javascript - 使用 JavaScript 自动填写 HTML 表单