【发布时间】:2020-10-30 22:42:35
【问题描述】:
如果对象具有一些值作为数组,我正在尝试递归拆分某种扁平对象。
- 如果没有值是数组,它应该按原样返回对象。
- 如果有一个值是空白数组,它应该按原样返回对象,但用空白字符串替换该数组值
- 如果有多个数组值,它应该返回对象的扁平化拆分。例如,如果有一个带有数组的对象,例如:
{
"wq": "e2201b13-aa03-4044-b4e3-1ecb25ef5083",
"we": "2019-08-19T00:00:00",
"er": "2019-09-18T00:00:00",
"rt": "PAID",
"ty": "300.00",
"yu": "27.27",
"ui": "272.73",
"io": "0",
"op": "300.00",
"pa": "8df30d22-5af3-4d61-a420-566ccdad8cdf",
"as": "AUD",
"sd": false,
"df": false,
"fg": "2019-12-04T19:57:48",
"gh": "2019-09-16T00:00:00",
"hj": "0",
"jk": [
"6c9809af-269b-4b86-8b07-78c83a12bd18",
"6c9809af-269b-4b86-8b07-78c83a12bd19"
],
"lk": [
'112',
'111',
],
"zx": null,
"xc": "",
"vb": []
}
它应该返回一个包含 4 个对象的数组,用于所有这些对象的排列。其中 lk、jk 和 vb 的值是字符串。 vb 总是空白的,因为它是一个空白对象。如果源对象中的 vb 是这样的 '' 即空白字符串,那将是相同的。 4 个对象,因为有 2 个数组,每个数组有 2 个对象。 2^2 = 4。例如,如果 vb 也有 2 个对象,那么将有 2^3=8 个对象,所有其他键都相同,但上面提到的 3 个键是字符串。
- 数组中的值未知。因此,它可以是任意数量的 od 值,范围从 0-n
- 源对象中可以是数组的键未知。因此需要递归遍历。
- 源对象中的值也可以是 null 或 {} 对象,可以忽略。
到目前为止,我已经编写了一个这样的启动器:
const result = [];
const reserve = {};
Object.keys(source).forEach((key) => {
if (source[key] instanceof Object) {
// const isArr = Array.isArray(source[key]);
source[key].forEach((element) => {
result.push({
...source,
[key]: element
});
});
} else {
reserve[key] = source[key]
}
})
console.log(result)
// console.log(reserve)
// console.log(result.map(i => Object.assign({}, i, reserve)))
它在某种程度上给了我想要的输出,但仍然需要工作。欢迎任何建议和建议。
【问题讨论】:
-
我确实遇到了一些建议,但它们没有提供所需的输出。
-
but still needs worknot giving desired output.不是很有用的用例语句 -
请添加想要的结果。
标签: javascript arrays ecmascript-6 flatten