第 11 题:将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{ return a-b})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{ return a-b})
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(48)
[...new Set(arr.toString().split(','))].sort((a,b)=>a-b)
额 虽然没大佬们厉害,暂且做个记录吧
arr.join(','),split(','),sort((a,b) => a - b)
拍平:
const deepFlatten = arr => [].concat(...arr.map(v => (Array.isArray(v) ? deepFlatten(v) : v)));
用toString会改变数组里面的原始数据,应该会是扣分项。
var arr = [...new Set(arr.join(',').split(','))].map(v => Number(v)).sort((a,b) => a-b)
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var arr = [...new Set(arr.toString().split(',').map(Number).sort((a,b)=>a-b))]
利用
Array.prototype.reduce
函数递归进行函数拍平去重加排序。这个咋样?// 已知如下数组:
var arr = [
[1, 2, 2],
[3, 4, 5, 5],
[6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];
// 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
原题中的Infinity是用来干什么的
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
console.log(Array.from(new Set(arr.toString().split(','))).sort((a,b)=>{return a- b }) );
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
let newArr = [...new Set(arr.flat(Infinity))].sort((a, b) => {return a-b})
写一个不用flat函数的吧。采用递归解决这个问题
const flat = (arr: (number | any[])[]): number[] => {
return _flat(arr, 0, arr.length - 1)
}
const _flat = (arr: (number | any[])[], l: number, r: number): number[] => {
if (l > r) return []
const first = arr[l]
if (typeof first === 'number') {
return [...new Set(_flat(arr, l + 1, r).concat(first))].sort((a, b) => a - b)
}
return [...new Set([..._flat(first, 0, first.length - 1), ..._flat(arr, l + 1, r)])].sort((a, b) => a - b)
}
[...new Set(JSON.parse('['+arr+']'))].sort((a,b)=> a-b)
function fn(arr) { return [...new Set(arr.reduce((prev, curr) => prev.concat(Array.isArray(curr) ? fn(curr) : curr), []))].sort((a, b) => a - b) }
[...new Set(arr.flat(Infinity))].sort((a,b)=>a-b)
const res = [...new Set(arr.toString().split(',').map(item => +item))].sort((a, b) => a-b);
[...new Set(arr.toString().split(','))].sort((a,b)=>a-b)
看了好多都是es6语法知识,或者toString转字符串,切割数组......
var Arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
var newArr = new Set(Arr.flat(Infinity))
function mySort(a,b){
return a - b
}
console.log([...newArr].sort(mySort))
2个问题:1、字符串数组;2、没去重。修正:Array.from(new Set(arr.toString().split(",").map(Number))).sort((a,b)=>{ return a-b})
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
const arr1 = arr.flat(4);
const arr2 = [];
for (let i = 0; i < arr1.length; i++) {
if (arr2.indexOf(arr1[i]) === -1) {
arr2.push(arr1[i]);
}
}
arr2.sort((a, b) => {
return a - b;
});
console.log(arr2);
我觉得这种方式更好吧,通俗易懂
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]
function flat(arr) {
return [...new Set(arr.flat(Infinity))].sort((a, b) => a - b)
}
console.log(flat(arr))
[...new Set(String(arr).split(','))].sort((a, b) => a - b).map(Number)
看一道面试题:
答案:
关于 Set 请查阅 Set、WeakSet、Map及WeakMap
本文首发于我的博客:数组扁平化、去重、排序
利用前面的答案,修正一个没用ES6的写法:
递归函数解法:
函数名应该是flat
谢谢大佬指点,学习了
你可能后面需要
arr.toString().split(",").sort((a,b)=>{ return a-b}).map(Number)
不然数组元素都是字符串 结果并没有去重 还有两个2 5和12
相关知识点
es6数组常用操作