js不可以按照顺序生成一个新数组吗?
js可以按照顺序生成一个新数组吗?我生成的数组排序不是想要的顺序,请教大佬,如何解决?
回答:
两层数据,先对第二层进行排序,排序依据是在 node
数组中的序号。把第二层所有节点的序号加起来,就是第一层节点的“权重”,然后再根据权重对第一层进行排序。
const parentWeights = arr.map(it => { const indexes = it.children.map(cit => [cit.colId, node.indexOf(cit.colId)]);
// 数据少的话,这里可以不用 map,直接用 node.indexOf()
const map = Object.fromEntries(indexes);
it.children.sort((a, b) => map[a.colId] - map[b.colId]);
return [it.colId, Object.values(map).reduce((r, i) => r + i, 0)];
});
const parentMap = Object.fromEntries(parentWeights);
arr.sort((a, b) => parentMap[a.colId] - parentMap[b.colId]);
console.log(JSON.stringify(arr, null, 2));
补充说明:其实不用加,随便拿一个序号出来就可以当权重,这样的话,代码可以简化一下
const parentWeights = arr.map(it => { it.children.sort((a, b) => node.indexOf(a.colId) - node.indexOf(b.colId));
return [it.colId, node.indexOf(it.children[0].colId)];
});
const parentMap = Object.fromEntries(parentWeights);
arr.sort((a, b) => parentMap[a.colId] - parentMap[b.colId]);
有一个问题要考虑就是,如果 node
中不存在某个 id
,就需要把找出来的序号 undefined
处理成一个较大的数,比如 99999
或者 Number.MAX_SAFE_INTEGER
,把它排到最后去(序号相同的顺序不能确定,要保证原顺序可以附加一些处理)。这种情况下,获取权重值的时候也需要遍历到找到一个有效序号为值(都没找到返回默认大值)
以上是 js不可以按照顺序生成一个新数组吗? 的全部内容, 来源链接: utcz.com/p/936272.html