【问题标题】:Add property to common items in array and array of objects为数组和对象数组中的常见项目添加属性
【发布时间】:2020-08-04 16:15:22
【问题描述】:

我有一个类似['A','B','F'] 的数组和一个对象数组

[
    {
        name:'A',
        prop1:'value1'
    },
    {
        name:'C',
        prop3:'value3'
    },
    {
        name:'E',
        prop7:'value7'
    },

]

我想过滤出数组中存在名称的对象,并将属性exists:true 添加到对象数组中并返回更新后的对象数组。

所以对于上述情况它应该返回

[
    {
        name:'A',
        prop1:'value1',
        exists:true
    },
    {
        name:'C',
        prop3:'value3'
    },
    {
        name:'E',
        prop7:'value7'
    },

]

我想这可以在 JavaScript Sets 的帮助下完成,但不确定如何。这也可以在线性复杂度中完成吗?

【问题讨论】:

    标签: javascript arrays ecmascript-6 javascript-objects


    【解决方案1】:

    要实现线性时间复杂度,您可以将字符数组转换为 Set。现在只需简单地遍历对象数组。

    const characters = ['A','B','F'];
    
    const objects = [
        {
            name:'A',
            prop1:'value1'
        },
        {
            name:'C',
            prop3:'value3'
        },
        {
            name:'E',
            prop7:'value7'
        },
    ];
    
    const charSet = new Set(characters);
    
    const output = objects.map(obj => {
        if (charSet.has(obj.name)) obj.exists = true;
        return obj;
    });
    

    这需要O(n + m),其中n是字符数组的长度,m是对象数组的长度。

    【讨论】:

    • 这很有帮助。谢谢
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2021-03-22
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多