Q:有一数组如下:
arr[ { ID:123, name:"jackket" }, { ID:132, name:"jacket" }, { ID:123, name:"tom" } ]
|
,用一算法去除ID同样的元素,保留其中一个,输出最后的数组。
function removeSameID(obj){ var _arr = []; _arr.push(obj[0]); for(var i=0;i < obj.length;i++){ var _num = 0; for(var j=0;j < _arr.length;j++){ if(obj[i].ID != _arr[j].ID){ _num ++; } if(_num == _arr.length){ _arr.push(obj[i]); } } } return _arr; }
|
注:上面用到了underscore.js插件。
不过,上面算法复杂度是N的二次方,如果数据相对较少那还可以忽略执行时间,但是数据一旦非常大,显然执行效率是非常差的,于是想到了另外一种解决思路,改进代码如下:
function removeSameID(arr){ var O = {}; var output =[]; _.each(arr,function(o){ O[o.ID] = o; }); for(var n in O){ output.push(O[n]); } return output; }
|
很明显,上面这种算法复杂度仅仅为N,执行时间大幅度减少。
通过这一个小小的需求,感悟就是:不论是java,c#,还是js,还是其它任何语言,最根本的还是算法,基础有多好,决定了能站多高。