gpt4 book ai didi

javascript - es6过滤并找到相同的对象项

转载 作者:行者123 更新时间:2023-11-30 13:50:38 25 4
gpt4 key购买 nike

我有一个关于使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com