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~~

posted @ 2015-06-11 20:37  cosine  阅读(234)  评论(0)    收藏  举报