✨对象去重

本文介绍了一种JavaScript中去除重复对象的方法,通过使用Map数据结构实现。示例数据包含多个具有相同techniqueName和techniqueId的对象,代码展示了如何保留唯一实例。去重后的结果有效地保留了不重复的项,适用于处理包含重复元素的数据集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对象去重

以下是数据格式:

const data = [
    { techniqueName: 'name1', techniqueId: 2400003 },
    { techniqueName: 'name2', techniqueId: 2400002 },
    { techniqueName: 'name1', techniqueId: 2400003 },
    { techniqueName: 'name3', techniqueId: 2400001 },
    { techniqueName: 'name4', techniqueId: 2400004 },
    { techniqueName: 'name2', techniqueId: 2400002 },
]
/**
 * @param {[]} 对象数组
 * @return {[]} 对象数组
 */
const ObjDuplication = () => {
    const map = new Map()
    for (const i of data) {
        if (!map.has(i.techniqueId)) {
            map.set(i.techniqueId, i)
        }
    }
    return [...map.values()];
}

去重后的结果:

在这里插入图片描述
如果有帮助到你 麻烦给一个三连+关注,能看到博主的最新blog
感谢感谢
在这里插入图片描述

<think>好的,我现在需要回答用户关于C++中初始化struct对象的问题。首先,我应该回忆C++中struct的基本概念,然后整理不同的初始化方法。用户可能需要详细的步骤和示例,所以需要结构清晰,分点说明。 首先,struct在C++中与类相似,默认成员是public的。初始化struct对象有多种方式,我需要逐一列举并解释。可能的初始化方法包括:默认初始化、成员列表初始化、构造函数初始化、C风格初始化等。 接下来,要确保每个方法都有对应的示例代码,并且用正确的LaTeX格式标注行内公式,比如变量名可能用$variable$的形式。同时,独立公式需要用$$...$$,但在这个问题中可能更多是代码示例,所以需要注意代码块的格式是否正确。 需要检查C++11之后的新特性,比如统一初始化列表(uniform initialization),是否适用。此外,聚合类(aggregate)的概念是否相关,比如当struct没有用户提供的构造函数、没有私有成员等情况,可以使用花括号初始化。 还要注意用户可能混淆C和C++中的struct初始化方式,需要指出区别。比如在C++11之前可能需要使用构造函数,而C中通常使用赋值初始化。同时,C++11引入了非静态成员初始化,可以在声明时直接给默认值。 可能遇到的问题包括:不同初始化方式的适用场景、初始化顺序、成员的默认值等。需要提醒用户注意事项,比如成员初始化的顺序要与声明顺序一致,避免依赖未初始化的成员。 最后,总结不同方法的优缺点,帮助用户根据情况选择合适的方式。确保回答结构清晰,步骤明确,示例正确,并且符合用户要求的格式,特别是正确使用LaTeX语法。</think>在C++中初始化`struct`对象有多种方式,以下是详细说明及示例: --- ### 1. **默认初始化** - 定义`struct`后直接声明对象,成员变量根据类型默认初始化(基本类型可能为未定义值) ```cpp struct Point { int x; double y; std::string name; }; Point p; // x未初始化,y未初始化,name为空字符串 ``` --- ### 2. **成员列表初始化(C++11起)** - 使用花括号`{}`直接初始化成员变量 $$\text{适用条件:struct为聚合类型(无用户自定义构造函数、无私有成员等)}$$ ```cpp Point p1 = {10, 3.14, "A"}; // C++11前 Point p2 {20, 6.28, "B"}; // C++11统一初始化 ``` --- ### 3. **构造函数初始化** - 定义构造函数显式控制初始化过程 ```cpp struct Point { int x; double y; std::string name; // 自定义构造函数 Point(int x_, double y_, const std::string& name_) : x(x_), y(y_), name(name_) {} }; Point p(30, 9.42, "C"); // 调用构造函数 ``` --- ### 4. **非静态成员初始化(C++11起)** - 在`struct`内直接为成员变量赋默认值 ```cpp struct Point { int x = 0; // 默认值 double y = 0.0; std::string name = "default"; }; Point p; // x=0, y=0.0, name="default" ``` --- ### 5. **C风格初始化(不推荐)** - 按声明顺序逐个赋值 ```cpp Point p; p.x = 50; p.y = 12.56; p.name = "D"; ``` --- ### **初始化方式对比** | 方法 | 优点 | 缺点 | |---------------------|-------------------------------|--------------------------| | 成员列表初始化 | 简洁,支持聚合类型 | 依赖成员顺序 | | 构造函数 | 灵活,可校验参数 | 需手动编写构造函数 | | 非静态成员初始化 | 提供默认值,减少未定义行为 | 无法动态设定初始值 | --- ### ⚠️ **注意事项** 1. 聚合初始化时成员顺序必须与声明一致 2. 混合使用默认值和列表初始化时,未指定的成员使用默认值 ```cpp struct Point { int x=1; double y=2.0; }; Point p {5}; // x=5, y=2.0 ``` 3. 对包含数组成员的`struct`,可用嵌套`{}`初始化 ```cpp struct Data { int arr[3]; char flags[2]; }; Data d {{1,2,3}, {'a','b'}}; ``` 选择初始化方式时,推荐优先使用**成员列表初始化**或**构造函数**以提高代码可读性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小朋友120

谢谢你拉近我与星星的距离

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值