给定1个对象(如下):
{
a: 1,
b: [ 1, 2, { c: true }, [ 3 ] ],
d: { e: 2, f: 3 },
g: null,
}
经过扁平化处理后,得到以下结果:
{
"a": 1,
"b[0]": 1,
"b[1]": 2,
"b[2].c": true,
"b[3][0]": 3,
"d.e": 2,
"d.f": 3,
"g": null
}
请实现 flatten(input) 函数, input 为一个javascript对象( Object 或者 Array ),返回值为扁平化后的结果。
*/
1、扁平化方法一(toString)注意:如果arr数组中有空数组,不使用此方法,用下面的方法;同时得到数组的值是字符串,不是数字。
2、扁平化方法二(正则表达式)
3、扁平化方法三(遍历数组)
2、利用indexOf去重
3、利用includes
4、利用filter
1、 排序方法一:(sort方法)
2、排序方法二:(冒泡排序)
参考文件: https://blog.csdn.net/qq_42957741/article/details/103859601
参考文件: https://blog.csdn.net/qq_27626333/article/details/77966760
所谓数组扁平就是将多维数组拍扁,变成一维数组,在面试中也是常常问到的问题,方法如下:
我们首先使用一个二维数组进行举例,更多维的操作一致
const array = [[1,2,3],4,[5,6]]
1.调用flat专门方法
array.flat(Infinity)//[1,2,3,4,5,6]
2.Array.from配合toString、split方法
const arr = Array.from(new Set(array.toString().split(','))).sort((a,b)=>a-b)//[‘1’,'2','3','4','5','6']
3.利用map实现处理
const arr = array.join(',').split(',').map((item)=>{return parseInt(item)})//[1,2,3,4,5,6]
4.既然map可以,我reduce也可以
使用reduce+concat
const arr = array.reduce((pre,cur)=>{return pre.concat(cur)})//[1,2,3,4,5,6]
5.ES6扩展运算符
俗话说,扩展在手,数组不愁
const arr = [].concat(...array)//[1,2,3,4,5,6]
当然实际应用中多半会封装函数,因为直接应用只能降一维,但原理是一样的。目前想到的就这么多,有问题大家可以提出互相交流o( ̄ヘ ̄o#)
3.11添加一个对象扁平化方法
数组都写了,最近学了对象扁平化,看看面试用不用的上......
const obj={
a:13,
b:565,
c:{d:'yo',e:3},
f:[{g:true,h:5}],
i:'911'
}
好像不能有空对象值,可以用Object.prototype.toString.call(null)来判断,空对象还是麻烦o(╯□╰)o