惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
N
News and Events Feed by Topic
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Engineering at Meta
Engineering at Meta
T
Tailwind CSS Blog
博客园_首页
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
A
About on SuperTechFans
I
InfoQ
S
Securelist
Last Week in AI
Last Week in AI
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Hacker News: Ask HN
Hacker News: Ask HN
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
腾讯CDC
大猫的无限游戏
大猫的无限游戏
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
美团技术团队
aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
罗磊的独立博客
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
S
Secure Thoughts
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Latest news
Latest news
Recent Announcements
Recent Announcements
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 热门话题
Security Latest
Security Latest
TaoSecurity Blog
TaoSecurity Blog
Cyberwarzone
Cyberwarzone
有赞技术团队
有赞技术团队

博客园 - howhy

html 元素包含关系 this 指向 空对象 Object.keys for ...in Reflect.ownKeys ...区别 逻辑运算符和空值运算符 运算符优先级 js 类型显式转换 js 高级函数 js 方法重载 fetch timeout js 任务顺序执行 暂停 js 并发任务 判断两个对象是否相同 js 动态拦截属性 js 通用动画 js groupby js 防抖和节流 实现 instanceof 操作符 js 单例模式 js 继承方法 js new的过程实现 js deepCopy js '=='的隐性类型转换规则
js 数组去重和扁平方法
howhy · 2025-12-26 · via 博客园 - howhy
// 实现多种数组去重方法
const arr = [1, 2, 2, 3, 4, 4, 5, 'a', 'a', 'b'];

// 方法1:使用 Set
console.log([...new Set(arr)])
// 方法2:使用 filter + indexOf

let newArr=arr.filter((item,index)=>{
    return arr.indexOf(item)===index
})
console.log(newArr);
// 方法3:使用 reduce
newArr=arr.reduce((prev,next)=>{
    if(!prev.includes(next)){
        prev.push(next);
    }
    return prev;
},[])
console.log(newArr);
// 方法4:对象属性去重
const newObj={}
arr.map(item=>{
    newObj[item]=item;
})
console.log(Object.values(newObj))
// 实现数组扁平化(多种方法)
const nestedArray = [1, [2, [3, [4]], 5]];

// 期望输出:[1, 2, 3, 4, 5]
    
// 方法1:递归
function arrFlat(arr){
    const newArr=[];
    function flat(arr){
        arr.forEach(element => {
            if(Array.isArray(element)){
                flat(element);
            }else{
                newArr.push(element);
            }
        });
    }
    flat(arr);
    return newArr;
}

console.log(arrFlat(nestedArray))
// 方法2:使用 flat 方法
console.log(nestedArray.flat(4))
// 方法3:使用 reduce
function reduceFlat(arr){
   return arr.reduce((prev, current) => {
    // 核心:如果当前元素是数组,递归扁平化后合并;否则直接添加
    return prev.concat(Array.isArray(current) ? reduceFlat(current) : current);
  }, []); // 初始化累加器为空数组
}
console.log(reduceFlat(nestedArray))
// 方法4:使用扩展运算符