2015-09-07 10 views
11

यह मेरा कोडकोणीय में जावास्क्रिप्ट सरणी से डुप्लिकेट ऑब्जेक्ट्स को कैसे निकालें?

var studentsList = [ 
 
    {"Id": "101", "name": "siva"}, 
 
    {"Id": "101", "name": "siva"}, 
 
    {"Id": "102", "name": "hari"}, 
 
    {"Id": "103", "name": "rajesh"}, 
 
    {"Id": "103", "name": "rajesh"}, 
 
    {"Id": "104", "name": "ramesh"}, 
 
]; 
 

 
function arrUnique(arr) { 
 
    var cleaned = []; 
 
    studentsList.forEach(function(itm) { 
 
     var unique = true; 
 
     cleaned.forEach(function(itm2) { 
 
      if (_.isEqual(itm, itm2)) unique = false; 
 
     }); 
 
     if (unique) cleaned.push(itm); 
 
    }); 
 
    return cleaned; 
 
} 
 

 
var uniqueStandards = arrUnique(studentsList); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(uniqueStandards, null, 4) + '</pre>';

उत्पादन

[ 
{ 
    "Id": "101", 
    "name": "siva" 
}, 
{ 
    "Id": "102", 
    "name": "hari" 
}, 
{ 
    "Id": "103", 
    "name": "rajesh" 
}, 
{ 
    "Id": "104", 
    "name": "ramesh" 
} 
] 

ऊपर कोड मैं JavaScript श्रृंखला से अद्वितीय वस्तुओं हो गया है, लेकिन मैं नकली वस्तुओं निकालना चाहते हैं। {: "102", "नाम": "हरि" "आईडी"}, { "आईडी": तो मैं सरणी से, जैसे [ उत्पादन डुप्लिकेट वस्तुओं के बिना प्राप्त करना चाहते हैं "104", "नाम": "रमेश" } ]

+0

लिए काम करता है तुम क्यों lodash का उपयोग नहीं करते या lib को रेखांकित? –

+0

बेहतर उत्पादकता के लिए 'lodash' का उपयोग करें: https://lodash.com/docs#uniq –

+0

कोणीय के साथ इसका क्या संबंध है? –

उत्तर

3

शायद यह? (नहीं सबसे शक्तिशाली कार्यान्वयन लेकिन काम किया जाता है):

var studentsList = [ 
    {Id: "101", name: "siva"}, 
    {Id: "101", name: "siva"}, 
    {Id: "102", name: "hari"}, 
    {Id: "103", name: "rajesh"}, 
    {Id: "103", name: "rajesh"}, 
    {Id: "104", name: "ramesh"}, 
]; 

var ids = {}; 

studentsList.forEach(function (student) { 
    ids[student.Id] = (ids[student.Id] || 0) + 1; 
}); 

var output = []; 
studentsList.forEach(function (student) { 
    if (ids[student.Id] === 1) output.push(student); 
}); 

console.log(output); 

संपादित करें: तेजी से विधि यदि छात्रों क्रमांक द्वारा आदेश दिया जाता है:

var studentsList = [ 
    {Id: "101", name: "siva"}, 
    {Id: "101", name: "siva"}, 
    {Id: "102", name: "hari"}, 
    {Id: "103", name: "rajesh"}, 
    {Id: "103", name: "rajesh"}, 
    {Id: "104", name: "ramesh"}, 
]; 

var output = []; 
studentsList.reduce(function (isDup, student, index) { 
    var nextStudent = studentsList[index + 1]; 
    if (nextStudent && student.Id === nextStudent.Id) { 
    return true; 
    } else if (isDup) { 
    return false; 
    } else { 
    output.push(student); 
    } 

    return false; 
}, false); 

console.log(output); 
+0

धन्यवाद maxdec –

1

आप जावास्क्रिप्ट के filter विधि का उपयोग कर सकते हैं:

उपर्युक्त समस्या का समाधान this में पाया जा सकता है। इस समाधान का प्रदर्शन बेहतर होगा क्योंकि हम शुद्ध जावास्क्रिप्ट का उपयोग कर रहे हैं और कोई तीसरी पार्टी ओवरहेड नहीं है।

app.controller('myCntrl',function($scope){ 

    var seen = {}; 
    //You can filter based on Id or Name based on the requirement 
    var uniqueStudents = studentsList.filter(function(item){ 
    if(seen.hasOwnProperty(item.Id)){ 
     return false; 
    }else{ 
     seen[item.Id] = true; 
     return true; 
    } 
}); 
    $scope.students = uniqueStudents; 

}); 

मुझे बताएं कि आपको किसी अन्य विवरण की आवश्यकता है या नहीं।

+0

मुझे डर है कि यह वही नहीं है जो वह ढूंढ रहा है। – maxdec

+0

@ वारुन - आपका कोड 101,102,103,104 जैसे अद्वितीय ऑब्जेक्ट्स लौटाएगा, लेकिन मैं 102,104 –

10

चेक इस

var uniqueStandards = UniqueArraybyId(studentsList ,"id"); 

    function UniqueArraybyId(collection, keyname) { 
       var output = [], 
        keys = []; 

       angular.forEach(collection, function(item) { 
        var key = item[keyname]; 
        if(keys.indexOf(key) === -1) { 
         keys.push(key); 
         output.push(item); 
        } 
       }); 
     return output; 
    }; 
+0

प्राप्त करना चाहता हूं जैसे CHAMP .. :) क्या कोई तरीका है कि मैं दो प्रमुख नामों की जांच कर सकता हूं .... –

+0

यह केस संवेदनशीलता स्वीकार करता है। यह 'इलेक्ट्रॉनिक्स' और 'इलेक्ट्रॉनिक्स' दिखाता है अलग-अलग शब्द हैं। – reegan29

0

यहाँ नियंत्रक जो डुप्लिकेट तत्व का पता लगाने और इसे हटाने और आप तत्व है जो कोई डुप्लिकेट है दे देंगे होगा। बस इस नियंत्रक

$scope.names= studentsList.reduce(function(array, place) { 
     if (array.indexOf(studentsList.name) < 0) 
       array.push(studentsList.name); 
     else 
       array.splice(array.indexOf(studentsList.name), 1); 
     return array; 
}, []); 

आशा का उपयोग इस अपने मामले

संबंधित मुद्दे