通过比较子属性(打字稿)从数组中删除“重复”对象

dex*_*com 5 javascript typescript

我从服务器收到一组复杂的对象。我想通过每个对象的子属性过滤原始数组以获取具有唯一对象的新数组,即:

let arr1 = originalArray;
let arr2 = originalArray.filter((ele, idx, arr) => ....
Run Code Online (Sandbox Code Playgroud)

例如,现在 arr1 由 3 个对象组成:

firstObj = {
    id: 0,
    Details:
        {
            License: 123456
        },
    name: 'abc'
};
secondObj = {
    id: 1,
    Details:
        {
            License: 131313
        },
    name: 'xcd'
};
thirdObj = {
    id: 2,
    Details:
        {
            License: 123456
        },
    name: 'bcd'
};
Run Code Online (Sandbox Code Playgroud)

所以,我想过滤数组,以便新返回的数组只包含两个对象,其中“许可证”属性将是唯一的,也就是说,将删除具有相同“许可证”的对象之一。谢谢。

mic*_*ckl 9

您可以使用array.reduce循环遍历源数组并将项目添加到结果中,如果它不包含相同Details.License

let result = [firstObj, secondObj, thirdObj].reduce((arr, item) => {
    let exists = !!arr.find(x => x.Details.License === item.Details.License);
    if(!exists){
        arr.push(item);
    }
    return arr;
}, []);
Run Code Online (Sandbox Code Playgroud)