【发布时间】:2020-09-18 17:15:44
【问题描述】:
您好,我正在尝试使用 id 从父数组和嵌套对象数组中删除重复项,但如果父 id 为空,则该对象应包含那些空 id 并删除其他重复的, 但是为空的 id 在嵌套数组中也有重复值,需要删除
这里是对象数组示例:
const arr = [{
id: 6652,
value: "erger",
compositField: []
},
{
id: 6652,
value: "sdfs",
compositField: []
},
{
id: 6653,
value: "sdgdfg",
compositField: []
},
{
id: 6000,
value: "trgd",
compositField: []
},
{
id: 6667,
value: "asdf",
compositField: []
},
{
id: 6667,
value: "fdg",
compositField: []
},
{
id: 6668,
value: "dfgr",
compositField: []
},
{
id: null,
value: "fg",
compositField: [{
id: null,
compositeId: 100,
value: 'test1'
},
{
id: null,
compositeId: 100,
value: 'test2'
},
]
},
{
id: null,
value: "dfgdf",
compositField: [{
id: null,
compositeId: 100,
value: 'test3'
},
{
id: null,
compositeId: 100,
value: 'test4'
},
]
},
{
id: null,
value: "fg",
compositField: [{
id: null,
compositeId: 101,
value: 'test1'
},
{
id: null,
compositeId: 101,
value: 'test2'
},
]
},
{
id: null,
value: "dfgdf",
compositField: [{
id: null,
compositeId: 101,
value: 'test3'
},
{
id: null,
compositeId: 101,
value: 'test4'
},
]
},
{
id: null,
value: "fg",
compositField: [{
id: null,
compositeId: 103,
value: 'test1'
},
{
id: null,
compositeId: 103,
value: 'test2'
},
]
},
{
id: null,
value: "dfgdf",
compositField: [{
id: null,
compositeId: 103,
value: 'test3'
},
{
id: null,
compositeId: 103,
value: 'test4'
},
]
},
];
以下是最终的o/p结果:
const arr = [{
id: 6652,
value: "sdfs",
compositField: []
},
{
id: 6653,
value: "sdgdfg",
compositField: []
},
{
id: 6000,
value: "trgd",
compositField: []
},
{
id: 6667,
value: "fdg",
compositField: []
},
{
id: 6668,
value: "dfgr",
compositField: []
},
{
id: null,
value: "fg",
compositField: [{
id: null,
compositeId: 100,
value: 'test1'
},
{
id: null,
compositeId: 100,
value: 'test2'
},
]
},
{
id: null,
value: "dfgdf",
compositField: [{
id: null,
compositeId: 100,
value: 'test3'
},
{
id: null,
compositeId: 100,
value: 'test4'
},
]
},
];
在上述结果中,6652 和 6667 被删除,因为它们是重复的,但 null id 被保留,因为我不想删除 null id 并删除其他重复值。
但是为空的 id 也像 CompositeId: 101 和 CompositeId: 103 一样重复 --> 这些重复项需要通过对名称进行组合映射来删除,因为名称在嵌套的复合字段中像“test1”、test2 等一样重复。数组,
注意:我想从嵌套数组中删除带有名称的重复项,因为 compositField 是动态值,因此需要与名称对应。
尝试以下方法:
let index = 0;
const finalResultData = Object.values(
finalData.reduce(
(a, c) =>
c.id === null ?
{ ...a,
[index++]: c
} :
{ ...a,
[c.id]: c
}, {}
)
);
【问题讨论】:
-
让索引 = 0; const finalResultData = Object.values( finalData.reduce( (a, c) => c.id === null ? { ...a, [index++]: c } : { ...a, [c.id] : C }, {} ) );这将仅删除不在嵌套数组中重复的 id
-
您是指
namevalue属性吗? -
@NinaScholz compositeId: 100, value: 'test3' --> name yes
标签: javascript angular