लोडश डुप्लिकेट को सरणी से हटा दें


232

यह मेरा डेटा है:

[
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello-how-are-you',
        id: "23"    
    },
    {
        url: 'www.example.com/i-like-cats',
        id: "24"    
    },
    {
        url: 'www.example.com/i-like-pie',
        id: "25"    
    }
]

लोडश के साथ, मैं डुप्लिकेट आईडी कुंजियों के साथ वस्तुओं को कैसे हटा सकता हूं? फ़िल्टर, मानचित्र और अद्वितीय के साथ कुछ, लेकिन निश्चित रूप से नहीं।

मेरा वास्तविक डेटा सेट बहुत बड़ा है और इसकी कुंजी अधिक है, लेकिन अवधारणा समान होनी चाहिए।

जवाबों:


439

_.uniqueवर्तमान संस्करण के लिए अब कोई काम नहीं किया जा रहा है क्योंकि 4.0.0 में यह परिवर्तन है । कार्यात्मक रूप से _.uniq, _.sortedUniq, _.sortedUniqBy, और _.uniqBy में विभाजित किया गया था

आप _.uniqByया तो द्वारा उपयोग कर सकते हैं

_.uniqBy(data, function (e) {
  return e.id;
});

या

_.uniqBy(data, 'id');

प्रलेखन: https://lodash.com/docs#uniqBy


लॉश के पुराने संस्करणों के लिए (<4.0.0)

यह मानते हुए कि डेटा अद्वितीय होना चाहिए idऔर आपका डेटा dataचर में संग्रहीत है , आप इस तरह से अद्वितीय () फ़ंक्शन का उपयोग कर सकते हैं :

_.unique(data, function (e) {
  return e.id;
});

या केवल

_.uniq(data, 'id');

1
लॉकश 4.0.1 डॉक्स ने इसे uniqBy में बदल दिया है। केवल यूनीक का उपयोग करके मेरे जीवन के लिए काम करने के लिए उपरोक्त उदाहरण नहीं मिला।
विल लवेट

2
लॉश 4.x के साथ, uniq () केवल एक पैरामीटर को स्वीकार करता है, जो एक सरणी है। जैसा कि @WillLovett ने कहा, हम इस समस्या को हल करने के लिए uniqBy () का उपयोग कर सकते हैं।
इरसेफुरिल

1
ओह यार। क्यों, ओह क्यों, यह वह है uniqजो आपको सुनाया जाना चाहिए कि इसके बजाय घुटने-कतार , unique...
जोश एम।

56

आप लॉश विधि _.uniqWith का उपयोग कर सकते हैं, यह 4.17.2 के वर्तमान संस्करण में उपलब्ध है।

उदाहरण:

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];

_.uniqWith(objects, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]

अधिक जानकारी: https://lodash.com/docs/#uniqWith


6
`uniqObjects = _.uniqBy (डॉक्स, फंक्शन (ई) {रिटर्न एक्स + आई;}); `यह विधि सरल वस्तुओं के साथ बड़े सरणियों के लिए तेज़ होगी
टैगप्लस 5

2
हाँ, लेकिन आप एक विशेषता को uniqBy के साथ पहले तर्क के रूप में पास करना चाहते हैं, जो सुविधाजनक नहीं है यदि आप इसे कई विशेषताओं के आधार पर अद्वितीय चाहते हैं जो आप पहले से नहीं जानते हैं
dbrrt

10

या साधारण सरणी के लिए, केवल संघ का उपयोग करें ।

_.union([1,2,3,3], [3,5])

// [1,2,3,5]

1
मुझे यह उत्तर पसंद है। यह सबसे अधिक पढ़ने योग्य नहीं है, लेकिन यह वास्तव में काम करता है यदि आप इसके बारे में गणित के दृष्टिकोण से सोचते हैं। _.union([1, 2, 2, 1, 3]) => [1, 2, 3]
सिपहर

5

केवल _.uniqBy () का उपयोग करें । यह एक सरणी का डुप्लिकेट-मुक्त संस्करण बनाता है।

यह एक नया तरीका है और 4.0.0 संस्करण से उपलब्ध है।

_.uniqBy(data, 'id');

या

_.uniqBy(data, obj => obj.id);

4

लॉश संस्करण 4+ के साथ, आप डुप्लिकेट ऑब्जेक्ट को या तो विशिष्ट संपत्ति या संपूर्ण ऑब्जेक्ट द्वारा हटा देंगे:

var users = [
  {id:1,name:'ted'},
  {id:1,name:'ted'},
  {id:1,name:'bob'},
  {id:3,name:'sara'}
];
var uniqueUsersByID = _.uniqBy(users,'id'); //removed if had duplicate id
var uniqueUsers = _.uniqWith(users, _.isEqual);//removed complete duplicates

स्रोत: https://www.codegrepper.com/?search_term=Lodash+remove+duplicates+fun+reray



1

एक साधारण सरणी के लिए, आपके पास संघ दृष्टिकोण है, लेकिन आप इसका उपयोग भी कर सकते हैं:

_.uniq([2, 1, 2]);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.