菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
11
0

一行代码解决求重问题

原创
05/13 14:22
阅读数 270

对需求的深刻认知,决定了解决问题的技巧高度

问题

例如:var a=[[1,2,3,5], [2,3,4], [2,3], [2,3,6,7]];
输出:[2,3]
例如:var a=[[0,1,2,3,5],[-1,1,4,5,6,7],[1,2,3,5,6]];
输出:[1,5]

常规

一般人会考虑降维,去重,计数,过滤,如下所示

var a = [[1, 2, 3, 5], [2, 3, 4], [2, 3], [2, 3, 6, 7]];
// 1.降维
var arr1 = [].concat(...a)
console.log(arr1)

// 2.去重
var uniq = [...new Set(arr1)]
console.log(uniq)

// 3. 计数
var counter = arr1.reduce((acc, v) => {
    if (v in acc) {
        acc[v]++
    } else {
        acc[v] = 1
    }
    // 4.非重
    // if(acc[v] > 1 && uniq.indexOf(v) > -1){
    //     uniq.splice(uniq.indexOf(v),1)
    // } 
    return acc
}, {})
console.log(counter)

// 4.求重
var duplicate = uniq.filter(e => counter[e] > 1)
console.log(duplicate)

打印

[ 1, 2, 3, 5, 2, 3, 4, 2, 3, 2, 3, 6, 7 ]
[ 1, 2, 3, 5, 4, 6, 7 ]
{ '1': 1, '2': 4, '3': 4, '4': 1, '5': 1, '6': 1, '7': 1 }
[ 2, 3 ]

一行

回归需求本质,实质上是求二维数组中各个元素(数组)之间的交集,
因此可选择任意一数组,用其中每个元素通过断言过滤其是否在每一子成员数组中。
思路: 过滤 --> 迭代 --> 断言

var dup = a[0].filter(item => a.every(arr =>arr.includes(item)))
console.log(dup)     // 输出 [ 2, 3 ]

发表评论

0/200
11 点赞
0 评论
收藏
为你推荐 换一批