如何对嵌套很深的对象数组进行递归排序并返回结果-javascript
我通过一个由id设置键的深嵌套对象对对象的深嵌套数组进行递归排序 此函数可以工作,但当调用函数时,当I如何对嵌套很深的对象数组进行递归排序并返回结果-javascript,javascript,arrays,sorting,dictionary,object,Javascript,Arrays,Sorting,Dictionary,Object,我通过一个由id设置键的深嵌套对象对对象的深嵌套数组进行递归排序 此函数可以工作,但当调用函数时,当Iconsole.log时,结果是未定义 如果我在调用此函数之前和之后对作为参数传递的未排序对象数组进行排序,则会在调用此函数之前和之后对其进行记录,但这不是从函数调用返回的-这是一种变异,我希望避免这种情况 我试过几件事: 使用.reduce(),而不是最初调用.map(),以及 添加一个空数组作为累加器,这允许函数 要返回但不排序,请执行以下操作:/ 返回我在最后调用的数组.map()- 但这
console.log
时,结果是未定义
如果我在调用此函数之前和之后对作为参数传递的未排序对象数组进行排序,则会在调用此函数之前和之后对其进行记录,但这不是从函数调用返回的-这是一种变异,我希望避免这种情况
我试过几件事:
.reduce()
,而不是最初调用.map()
,以及
添加一个空数组作为累加器,这允许函数
要返回但不排序,请执行以下操作:/.map()
-
但这看起来像是一个黑客,它还将结果封装在一个
数组。
我曾仔细尝试过将返回值放在不同的位置,但通常结果是[未定义]
,或者是
包含未定义的
function sortDeepNestedArray(unsortedArray, sortedObj){unsortedArray.map((obj) => {
const children = obj.Children;
const Id = obj.Id
if (children && children.every(o => !o.Children)) {
Object.keys(sortedObj).map(key => {
if (Id === key) {
return children.sort((a, b) => {
a = sortedObj[key].Children[a.Id]
b = sortedObj[key].Children[b.Id]
return a - b
});
}
});
}
Object.keys(sortedObj).map(key => {
const isNotBaseCase = children &&
children.every(o => o.Children) &&
Id === key &&
sortedObj[key] &&
sortedObj[key].Children
if (isNotBaseCase) {
sortDeepNestedArray(children, sortedObj[key].Children);
}
});
});
}
如果你使用的是<>代码> map < /代码>,并且没有对结果做任何事情,请考虑<代码>。要克隆数组,只需使用
.slice()
@Bergi-Hmmmm…我已经进行了深度克隆,所以你说得对,我不需要担心变异。那么.map()不返回tho呢?@zero\u很酷,单独来说就是:那么你就不需要map
。