编写一个程序实现数组的扁平化,去重重复项,最终得到一个升序且不重复的数组
注:
- 扁平化:arr.flat(Infinity)
- 去重:[...new Set(arr)] ???Array.from(new Set(arr))
- 排序:sort()
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
- 使用ES6中提供的Array.prototype.flat(Infinity)
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
arr =?Array.from(new?Set(arr.flat(Infinity))).sort((a, b) =>?a -?b)
console.log(arr)
- 利用tostring()方法把数组直接变为字符即可实现扁平化处理再进行去重排序
注:通过toString()处理后不管又多少级,最后都会变成以逗号分隔的字符串,没有了中括号和所谓的层级,相当于直接扁平化处理了
- arr.tostring() ????//把多维数组直接变成字符串
- arr.tostring().split(‘,’) ???// 用逗号隔开
- arr.map(item=>{return Number(item)}) ??// 通过map的方法把字符串转为数字
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
arr =?arr.toString().split(',').map(item =>?{ return?Number(item) })
- JSON.stringify(arr)(把json格式的对象转为json格式的字符串)
注:
- 通过JSON.stringfy(arr) ?将json格式对象转换为json格式字符串
- 通过replace()方法把“[]”转换为空(replace(/(\[|\])/g,’’))
- 通过split(‘,’)用逗号将字符串拆分为数组
- 通过map()和Number()方法将数组中每一项遍历转换为数字
- 通过sort()方法排序
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
arr =?JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item =>?{ return?Number(item) }).sort((a, b) =>?{ return?a -?b })
- ?用some()+ While() +concat() 循环
注:some()方法进行判断检验数组中的某一项有没有符合函数中提供规则的 ?返回true或者false
Some和find的区别: some 返回的是Boolean ,find 找到符合规则的,返回当前这一项,找到一项就不在找,没找到符合规则的返回undefined
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
while?(arr.some(item =>?{ return?Array.isArray(item) })) {
arr =?[].concat(...arr)
}
- 递归
let?arr =?[1, 2, 3, 45, 58, [154, 25, 14, 14, [4587, 45, 125, [145, 20, 145, 23, [12, 10]]]]]
~function?() {
function?myFlat() {
let?result =?[],
_this =?this;
//循环arr中的每一项,把不是数组的存到result新数组中
let?fn?=?(arr) =>?{
for?(let?item of?arr) {
if?(Array.isArray(item)) {
fn(item);
continue;
}
result.push(item)
}
}
fn(_this);
return?result;
}
Array.prototype.myFlat?=?myFlat
}();
arr =?arr.myFlat();
|