我使用这种方法(不好)
function unique(objArray){
uArray是临时数组变量,用于将对象保存为字符串
var uArray=[];
此函数返回arr
var arr=[];
每个对象转换为字符串
for(var i=0;i<objArray.length;i++){
if(typeof objArray[i] === "object")
uArray[i]=JSON.stringify(objArray[i]);
}
将字符串推送到newArray arr
for( i=0;i<uArray.length;i++){
if( arr.indexOf(uArray[i]) === -1)
{
arr.push(uArray[i]);
}
}
将字符串解析为对象
for(i=0;i<arr.length;i++)
{
arr[i]=JSON.parse(arr[i]);
}
return arr;
}
**样本输入数组**
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'salman', 'age': 50, 'active': false },
{ 'user': 'usman', 'age': 44, 'active': false },
{ 'user': 'abrar', 'age': 22, 'active': false },
{'K1':21, 'k2':22},
{ firstName:'XYZ',lastName'ABC'},`
{ firstName:'XYZ',lastName:'ABC'},
{ firstName:'XYZ1',lastName:'ABC1'}
];
unique(users);
答案 0 :(得分:1)
以这种方式尝试:
function unique(objArray){
return objArray.filter(function(inst, i){
for(var j=i+1; j<objArray.length; j++){
if(JSON.stringify(objArray[j])==JSON.stringify(inst)) return false;
}
return true;
});
}
答案 1 :(得分:1)
map
将对象转换为您正在执行的字符串,filter
复制出来,然后重新map
对象。
function unique(arr) {
return arr.map(function(el) {
return JSON.stringify(el);
}).filter(function(e, i, a) {
return a.indexOf(e) === i;
}).map(function(el) {
return JSON.parse(el);
});
}
unique(users);
答案 2 :(得分:-3)
我看到你要从数组中删除重复项。您可以使用下划线的unique
功能来执行此操作。
我建议您使用下划线实用程序轻松完成此操作(以下链接)。
使用下划线:
_.uniq(inputArray) // Return unique keys
生成数组的无副本版本。如果数组有 已经排序
http://underscorejs.org/docs/underscore.html#section-60
此功能的源代码:
_.uniq = function(array, isSorted, iteratee, context) {
if (!_.isBoolean(isSorted)) {
context = iteratee;
iteratee = isSorted;
isSorted = false;
}
if (iteratee != null) iteratee = cb(iteratee, context);
var result = [];
var seen = [];
for (var i = 0, length = getLength(array); i < length; i++) {
var value = array[i],
computed = iteratee ? iteratee(value, i, array) : value;
if (isSorted) {
if (!i || seen !== computed) result.push(value);
seen = computed;
} else if (iteratee) {
if (!_.contains(seen, computed)) {
seen.push(computed);
result.push(value);
}
} else if (!_.contains(result, value)) {
result.push(value);
}
}
return result;
};
<script src="//underscorejs.org/underscore-min.js"></script>
<script>
b={t:'B is Object'}
var a=[1,2,3,3,'4',b,'4',b]
document.write('Before Unique:<br>')
document.write(a)
document.write('<br>')
document.write('After Unique:<br>')
document.write (_.unique(a))
</script>