数组重新排序思路,请大佬指点一下
javascript吧
全部回复
仅看楼主
level 5
SCOUT蛋蛋
楼主
效果:数组里重复的元素重新排序,并添加多一个属性。处理方法有没有可以优化的地方?
2022年07月14日 09点07分
1
level 3
白色暴君奈叶✨
set转成数组是否必要?没记错的话set也实现了与数组相同的foreach,可以直接用的。
思路挺好的。
用set来去重不失为一种好方法,但不能特定到谁是重复项,所以得在遍历newArr时去遍历a,把重复项取出来,有点On2的意思。
咱会想着避免循环嵌套,手动遍历a建一个对象去记录重复项和非重复项,然后靠着这个对象再遍历一次a,用判断来处理数据,把重复项存进对象,最后去遍历对象,拼接结果。这样就是On了。
2022年07月17日 12点07分
2
SCOUT蛋蛋
非常感谢! 测试了set确实可以直接。 按你的方法好像会把所有重复的优先排前面,例如[1,2,1,3,3]=>[1,1,3,3,2]而不是[1,1,2,3,3]。请问是我没完全理解吗
2022年07月18日 04点07分
白色暴君奈叶✨
@SCOUT蛋蛋
之差临门一脚了。因为最后得到的结果是拼接得到的通过遍历对象,拼接得到的,所以他的顺序也是由遍历的顺序决定的。
2022年07月18日 05点07分
白色暴君奈叶✨
@SCOUT蛋蛋
出现这样的问题说明在遍历的时候先将重复项们遍历出来了,再遍历非重复项。你可以为记录重复项与非重复项的对象排序,或者是为重复项和非重复项编个号一并存入对象,遍历的时候按照编号
2022年07月18日 05点07分
SCOUT蛋蛋
@白色暴君奈叶✨
代码处理上有点复杂,获取不到想要结果….明天再看看
2022年07月18日 10点07分
level 3
白色暴君奈叶✨
其实楼主的方法足够好了
咱的思路大体上是这样的,主要是避免双循环,所以空间复杂度高了,代码量也比楼主的大,但也是提供一个思路吧。
2022年07月19日 02点07分
4
SCOUT蛋蛋
非常感谢层主耐心详细解答,学到了
2022年07月19日 04点07分
1