var arr = [
{id:1},
{id:2},
{id:1}
];
/*
unique(arr, 'id'); //->
[{id: 1}, {id: 2}];
unique([1,2,2,2,3,3,4]); //->
[1,2,3,4];
unique(arr, function(item){
return item.id;
}); //->
[{id: 1}, {id: 2}];
*/
function unique(array, filter){
var tmpObject = {hasStored: {}, uniqueArray: []}, i, fun;
if(! filter){ // 没有传filter,使用array的值当作filter
fun = function(item){
return item;
}
}else{
if(typeof filter ==='string'){ // 用filter当作key
fun = function(item){
return item[filter];
}
} else if(typeof filter !== 'function'){ // 出错
throw {
message: "The second argument's type must be function/string"
}
}
// 其它,自定义filter
}
for(i = 0; i < array.length; i++){
// 传进三个参数[当前元素,当前下标,数组本身]
var uniqueKey = fun(array[i], i, array);
if(! tmpObject['hasStored'][uniqueKey]){
tmpObject['hasStored'][uniqueKey] = true;
tmpObject['uniqueArray'].push(array[i]);
}
}
return tmpObject.uniqueArray;
}