emmm 刚开始用这个,整体来说样式不太好调,所以这里我这里尽量给大家放截图吧,不然代码放上去太乱了
第一题:我用的是递归的方法,但是师傅讲递归的方法复杂度高,不适合计算量大的(我当时写的时候,就觉得电脑卡卡的,还以为是电脑原因呢)
所以这里给大家换个思路,参考原文是https://www.cnblogs.com/niuniudashijie/p/5988271.html
第二题:
师傅还给延伸了下
扩展:如果arr里的对象很复杂,属性很多,每次排序依据的属性值都不一样怎么解决?
如果事先指定了比较的属性,那么上面的函数完全可以实现需求。如果在追求复用性的情况下,要求传递一个属性即可以按照此属性值给对象数组排序,而在此例中,比较函数需要取到数组中保存的对象的一个属性并返回比较结果,外层的compare函数接收比较的属性名,return一个以两个对象为参数的匿名函数,最终在匿名函数中取得需要比较的对象属性,并返回最终结果
第三题:
师傅讲这一题有个陷阱 。。。。
如果对象里还有对象或者数组的话,他们的属性还是可变的
这就涉及到深冻结与浅冻结,结合上面我写的来看,表面上是冻结了
如果一个对象的属性是一个对象,那么对这个外部对象进行冻结,内部对象的属性是依旧可以改变的,这就叫浅冻结,若把外部对象冻结的同时把其所有内部对象甚至是内部的内部无限延伸的对象属性也冻结了,这就叫深冻结。
结合上面我写的来看,表面上是冻结了,但对象里的对象依然可以改变
参考https://www.cnblogs.com/mengfangui/p/9911323.html
第四题:
第五题:
第六题: