//将对象元素转成字符串比较
/**
* 将对象元素转成字符串比较
* @param {object} obj 对象元素
* @param {object} keys 包含key值字符串的数组
* @return {object} 返回处理后字符串形式的对象元素
*/
function obj2key(obj, keys){
var n = keys.length,
key = [];
while(n--){
key.push(obj[keys[n]]);
}
return key.join('|')
}
/**
* 去重操作
* @param {object} array 待去重的数组
* @param {object} keys 包含key值字符串的数组
* @return {object} 返回去重后的数组
*/
function uniqeByKeys(array,keys){
var arr = [];
var hash = {};
for (var i = 0, j = array.length; i < j; i++) {
var k = obj2key(array[i], keys);
if (!(k in hash)) {
hash[k] = true;
arr.push(array[i]);
}
}
return arr ;
}
用法如下:调用函数:
var arr =[
{id: 3583, productId: 3644, name: "8483"},
{id: 8646, productId: 5828, name: "27"} ,
{id: 7263, productId: 4161, name: "93" },
{id: 7263, productId: 4161, name: "93"},
{id: 7263, productId: 4161, name: "93" }
]
uniqeByKeys(arr,['id']);
结果会返回一个新的数组: [
{id: 3583, productId: 3644, name: "8483"},
{id: 8646, productId: 5828, name: "27"} ,
{id: 7263, productId: 4161, name: "93" }
]