JS这个数组出重处理?

let arr1 = '[[11],[12],[13],[12,1201],[13,1304],[13,1305]]'

处理成
[11,1201,1304,1305]

阅读 2.5k
4 个回答

方法一:

let arr1 = [[11],[12],[13],[12,1201],[13,1304],[13,1305]];

// 降维
let flatArr = arr1.flat();

// 统计出现次数
let countMap = new Map();
for (let num of flatArr) {
    countMap.set(num, (countMap.get(num) || 0) + 1);
}

// 筛选出只出现一次的元素
let uniqueArr = [];
for (let [num, count] of countMap.entries()) {
    if (count === 1) {
        uniqueArr.push(num);
    }
}

console.log(uniqueArr); // 输出: [11, 1201, 1304, 1305]

方法二:先降维,然后去重,最后筛选掉12和13

let arr1 = '[[11],[12],[13],[12,1201],[13,1304],[13,1305]]';
let result = [...new Set(JSON.parse(arr1).flat())].filter(item => item !== 12 && item !== 13);
console.log(result);
// 输出结果: [11, 1201, 1304, 1305]
getnum(){
 return  new Set(this.arr1.join(',').split(',').filter(v=>v!=12&&v!=13).map(item=>+item))
},
let arr1 = '[[11],[12],[13],[12,1201],[13,1304],[13,1305]]'
let result = Array.from(new Set(JSON.parse(arr1).flat()))
const arr1 = "[[11],[12],[13],[12,1201],[13,1304],[13,1305]]";

function handle(list) {
    // 外层数组可看作一个元组的数组,每个元组有 1~2 个元素
    // 按元组的第 1 个元素分组
    const map = list.reduce((group, [first, second]) => {
        const arr = group.get(first) ?? (group.set(first, []) && group.get(first));
        if (second !== undefined) { arr.push(second); }
        return group;
    }, new Map());

    // 分组后得到一个 Map 对象,取 entry 列表。entry 的值是一个数组,且可能为空(空数组)。
    // 当 entry 的值是空的时候取键,否则取值,结果是键/值混排的一个数组
    // 对这个数组进行一层展开即得答案(这两步可合并成 flatMap)
    return [...map.entries()]
        .flatMap(([key, value]) => value.length ? value : key);
    
    // 如果直接展开可能产生重复值(目前从题目上来看是不会产生重复的)
    // 可以使用 Set 来去个重
}

const result = handle(JSON.parse(arr1));
console.log(result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题