我们常见的一半都是将多维数组进行扁平化操作,但有时候我们也需要对对象进行类似操作,对象有可能是数组对象,也有可能是对象数组。
//判断数据类型
function typeJudge(val, type) {
return Object.prototype.toString.call(val) === `[object ${type}]`
}
function objjectFlat(val, newObj) {
if (typeJudge(val, 'Array')) {
val.forEach(obj => {
objjectFlat(obj, newObj)
})
}
if (typeJudge(val, 'Object')) {
for (let key in val) {
if (val.hasOwnProperty(key)) {
let value = val[key]
//这里之所以这么判断是因为要排除正则对象,函数等特殊类型
if (!typeJudge(value, 'Array') && !typeJudge(value, 'Object')) {
newObj[key] = value
} else {
objjectFlat(value, newObj)
}
}
}
}
return newObj
}