2016-06-13 3 views
1

ich Duplikate aus der folgenden json Arraydublicate Werte von Json-Array entfernen Winkel mit js

$scope.array = [ 
    {"name":"aaa","key":"1"}, 
    {"name":"bbb","key":"2"}, 
    {"name":"aaa","key":"1"}, 
    {"name":"ccc","key":"3"}, 
    {"name":"bbb","key":"2"} 
]; 

Ich habe versucht, folgenden Code entfernen will, aber es ist nicht

var ids = {}; 

$scope.array.forEach(function (list) { 
    ids[list.name] = (ids[list.name] || 0) + 1; 
}); 

var finalResult = []; 
$scope.array.forEach(function (list) { 
    if (ids[list.name] === 1) finalResult.push(student); 
}); 

console.log(finalResult); 

Dies ist das erwartete Ergebnis zu arbeiten.

$scope.array = [ 
    {"name":"aaa","key":"1"}, 
    {"name":"bbb","key":"2"} , 
    {"name":"ccc","key":"3"} 
]; 
+0

http://stackoverflow.com/questions/9229645/remove-duplicates-from-javascript-array – Vineet

+1

Mögliches Duplikat von [Remove Duplicate Objects from JSON Array] (http://stackoverflow.com/questions/23507853/remove -duplikat-objekte-aus-json-array) –

Antwort

0

Sie können den einzigartigen Filter verwenden.

<tr ng-repeat="arr in array | unique: 'key'" > 
    <td> {{ arr.name }} , {{ arr.key }} </td> 
</tr> 
0

Sie können mit so etwas wie dies tun Array#filter

$scope = {}; 
 
$scope.array = [{ 
 
    "name": "aaa", 
 
    "key": "1" 
 
}, { 
 
    "name": "bbb", 
 
    "key": "2" 
 
}, { 
 
    "name": "aaa", 
 
    "key": "1" 
 
}, { 
 
    "name": "ccc", 
 
    "key": "3" 
 
}, { 
 
    "name": "bbb", 
 
    "key": "2" 
 
}]; 
 

 
var ids = {}; 
 

 
$scope.array = $scope.array.filter(function(v) { 
 
    var ind = v.name + '_' + v.key; 
 
    if (!ids[ind]) { 
 
    ids[ind] = true; 
 
    return true; 
 
    } 
 
    return false; 
 
}); 
 
console.log($scope.array);

0

Sie reine Javascript verwenden können!

uniqueArray = a.filter(function(item, pos) { 
    return a.indexOf(item) == pos; 
}) 

kopiert es von this answer !!

in Ihrem Fall:

var finalResult = []; 
finalResult = $scope.array.filter(function(item, pos) { 
    return array.indexOf(item) == pos; 
}) 
0

können Sie verwenden

$scope.array = = [{ 
 
    "testada": "ecom", 
 
     "id": "27" 
 
}, { 
 
    "testada": "alorta", 
 
     "id": "27" 
 
}, { 
 
    "testada": "france24", 
 
     "id": "23" 
 
}, { 
 
    "testada": "seloger", 
 
     "id": "23" 
 
}]; 
 

 
var arr = [], 
 
    collection = []; 
 

 
$scope.array.forEach(json_all, function (index, value) { 
 
    if ($.inArray(value.id, arr) == -1) { 
 
     arr.push(value.id); 
 
     collection.push(value); 
 
    } 
 
}); 
 

 
console.log(json_all); 
 
console.log(collection); 
 
console.log(arr);

0
$scope.array = [ 
     {"name":"aaa","key":"1"}, 
     {"name":"bbb","key":"2"}, 
     {"name":"aaa","key":"1"}, 
     {"name":"ccc","key":"3"}, 
     {"name":"bbb","key":"2"} 
    ]; 

    var newArr = []; //this will be new array with no duplicate value 
    for (var i = 0; i < $scope.array.length; i++) { 

     if(!ifContains($scope.array[i])){ 
      newArr.push($scope.array[i]); 
     } 
    } 

    function ifContains(obj){ 
     debugger 
     var flag = false; 
     for(var i = 0; i < newArr.length; i++){ 
      if(newArr[i].name == obj.name && newArr[i].key == obj.key) 
       return true; 
      else 
       flag = false; 
     } 
     return flag; 
    } 
0

Es kann sehr einfach durch reine JS erfolgen. Eine Erfindung von wird uns enorm helfen. Mal sehen, wie es funktioniert;

Object.prototype.compare = function(o){ 
 
    var ok = Object.keys(this); 
 
    return typeof o === "object" && ok.length === Object.keys(o).length ? ok.every(k => this[k] === o[k]) : false; 
 
}; 
 
var myArray = [ 
 
    {"name":"aaa","key":"1"}, 
 
    {"name":"bbb","key":"2"}, 
 
    {"name":"aaa","key":"1"}, 
 
    {"name":"ccc","key":"3"}, 
 
    {"name":"bbb","key":"2"} 
 
], 
 
filtered = myArray.reduce((p,c) => p.findIndex(f => c.compare(f)) == -1 ? p.concat(c) : p,[]); 
 
console.log(JSON.stringify(filtered));

Hinweis: Object.prototype.compare() v.01 wird tief Objektvergleich nicht jetzt ab.