js不可以按照顺序生成一个新数组吗?

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

回到顶部