我有一个关于使用 ES6 进行过滤的问题:
我有一些数据需要用其他对象过滤
我的数据是:
let data = [
{
id: 1,
names: ['A', 'B']
},
{
id: 2,
names: ['C']
}
]
我有另一个对象:
let nameValues = [
{
name: 'A',
selected: false
},
{
name: 'B',
selected: true
},
{
name: 'C',
selected: false
},
{
name: 'D',
selected: true
}
]
我首先在 selectedNames
中获取 selected == true
项:
let selectedNames = nameValues.filter(function(item) {
return item.selected
})
我得到的结果是:
selectedNames = [
{
name: 'A',
selected: true
},
{
name: 'D',
selected: true
}
]
我需要将它与 data
进行比较,获取 data
中的项目,其中 item.names
具有 selectedNames
在里面。
我不需要完全匹配——我需要数据对象中的项目,它们的名称数组中包含我的 selectedNames
对象 name
值:
在这种情况下,我需要得到这样的数据对象结果:
这是一个与我的 selectedNames
不匹配 100% 的项目,但它具有我正在寻找的这些值之一
let data = [
{
id: 1,
names: ['A', 'B']
},
]
如何使用 es6 做到这一点?
最佳答案
你的做法是对的。我只是将 selectedNames 存储为一个数组以便于查找。
在 data.filter 中,您可以检查 some
名称是否在 selectedNames 数组中可用
let data = [
{
id: 1,
names: ['A', 'B']
},
{
id: 2,
names: ['C']
}
]
let nameValues = [
{
name: 'A',
selected: false
},
{
name: 'B',
selected: true
},
{
name: 'C',
selected: false
},
{
name: 'D',
selected: true
}
]
let selectedNames = nameValues.filter(item => item.selected).map(x => x.name);
let result = data.filter(obj => obj.names.some(name => selectedNames.includes(name)));
console.log(result);
关于javascript - es6过滤并找到相同的对象项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325713/