比较 2 个对象数组并找到匹配的颜色 id,然后创建一个新数组 Javascript



我仍在学习如何创建遍历数组的函数。我有一个我无法弄清楚的艰难 ou 我有两个不同的对象数组。

阵列 1:

const data1 = [
{
name: 'I am obj one',
id: 125,
category: [18],
colors: [19, 20],
},
{
name: 'I am obj two',
id: 111,
category: [18],
colors: [19, 20],
},
];

阵列 2

const data2 = [
{
invitation: {
name: 'Type',
options: [
{
name: 'Show1',
id: 21,
},
{
name: 'Show2',
id: 22,
},
],
},
},
{
color: {
name: 'Color',
options: [
{
name: 'Gray',
id: 19,
},
{
name: 'Pink',
id: 26,
},
{
name: 'Yellow',
id: 20,
},
],
},
},
];

我正在尝试创建一个新的 data2 数组,其中 data1 对象中仅存在"颜色"选项。 对于上面的这个例子,我想返回一个看起来像这样的新数组:

const data2 = [
{
invitation: {
name: 'Type',
options: [
{
name: 'Show1',
id: 21,
},
{
name: 'Show2',
id: 22,
},
],
},
},
{
color: {
name: 'Color',
options: [
{
name: 'Gray',
id: 19,
},
{
name: 'Yellow',
id: 20,
},
],
},
},
];

这是我到目前为止的代码

const obj = data1.reduce((acc, item) => {
acc[item.id] = item;
return acc;
})
data2.forEach(d => {
return d;
});
console.log(data2);

在对象中缓存其中一个数组,它将运行时间减少到线性。 然后我正在使用forEach方法。我只是不确定从这里开始。

这应该为您解决问题!

创建了一组唯一的颜色 ID,然后根据集合中存在的颜色 ID 从 data2 中筛选颜色数据

const data1 = [
{
name: 'I am obj one',
id: 125,
category: [18],
colors: [19, 20],
},
{
name: 'I am obj two',
id: 111,
category: [18],
colors: [19, 20],
},
];
const data2 = [
{
invitation: {
name: 'Type',
options: [
{
name: 'Show1',
id: 21,
},
{
name: 'Show2',
id: 22,
},
],
},
},
{
color: {
name: 'Color',
options: [
{
name: 'Gray',
id: 19,
},
{
name: 'Pink',
id: 26,
},
{
name: 'Yellow',
id: 20,
},
],
},
},
];
var set = new Set();
data1.forEach(obj => {  obj.colors.forEach(color => set.add(color));}
)

data2[1].color.options = data2[1].color.options.filter(option => set.has(option.id));

console.log(data2);

最新更新