6.11 数组的练习 --Unique In Order
麻痹挺简单的一个练习,我搞了好久
第一次把FireBug 死循环搞崩=。=
原题:
mplement the function unique_in_order which takes as argument a sequence and returns a list of items without any elements with the same value next to each other and preserving the original order of elements.
For example:
uniqueInOrder('AAAABBBCCDAABBB') == ['A', 'B', 'C', 'D', 'A', 'B']
uniqueInOrder('ABBCcAD') == ['A', 'B', 'C', 'c', 'A', 'D']
uniqueInOrder([1,2,2,3,3]) == [1,2,3]
我的渣解决
var uniqueInOrder=function(iterable){ var fun = function(runarr){ var copy = runarr.slice(0); for (var i=0 ;i<copy.length;i++) { if(copy[i]===copy[i+1]){ copy.splice(i,1); i=i-1; } } return copy; } if(typeof iterable==="string"){ return fun(iterable.split("")); }else{ return fun(iterable);; } }
里面主要是JS删除数组元素的方法 splice的使用,
还有一个浅层复制数组的方法 slice,其实不知道什么叫浅复制啦,反正就是复制了不是引用。
当然老子每次作业都能看到瞎了眼的Best Practice
function uniqueInOrder(it) { var result = [] var last for (var i = 0; i < it.length; i++) { if (it[i] !== last) { result.push(last = it[i]) } } return result }
var uniqueInOrder = function (iterable) { return [].filter.call(iterable, (function (a, i) { return iterable[i - 1] !== a })); }
多学习,才能少写代码,= =
其实你想的太麻烦了,第一个实践,对指针的理解很好,就是直接按照比较遍历的方法。
第二个这么短你是想死吗,过滤器的使用,还是很屌的。
其实大家忽略我的做法吧,好菜。。
在使用JS数组,多考虑指针,原生库的特性,push ,pop
map filter
这题最佳实践一定是用 filter~~
浙公网安备 33010602011771号