मेरा प्रश्न वास्तव में इसके समान है: Extracting JavaScript (jQuery के साथ) में किसी सरणी से सबसे अधिक डुप्लिकेट मान

मुझे यह मिला लेकिन यह हमेशा एक मान लौटाता है जो 200 है।

var arr = [100,100,200,200,200,300,300,300,400,400,400];
    var counts = {}, max = 0, res;
    for (var v in arr) {
      counts[arr[v]] = (counts[arr[v]] || 0) + 1;
      if (counts[arr[v]] > max) { 
        max = counts[arr[v]];
        res = arr[v];
      }

    }
    console.log(res + " occurs " + counts[res] + " times");

कृपया मुझे केवल एक ही नहीं मान वापस करने में मदद करें ...

परिणाम इस तरह होना चाहिए: 200,300,400। कृपया मदद करें धन्यवाद!

1
Yamoshi Wolverine 3 अप्रैल 2018, 08:23

5 जवाब

सबसे बढ़िया उत्तर

अधिकतम परिणाम प्राप्त करने के लिए आपको अपनी गणना को पुनरावृत्त करना होगा।

var arr = [100,100,200,200,200,300,300,300,400,400,400];
    var counts = {}, max = 0, res;
    for (var v in arr) {
      counts[arr[v]] = (counts[arr[v]] || 0) + 1;
      if (counts[arr[v]] > max) { 
        max = counts[arr[v]];
        res = arr[v];
      }

    }
    var results = [];
    for (var k in counts){
      if (counts[k] == max){
        //console.log(k + " occurs " + counts[k] + " times");
        results.push(k);
      }
    }
    console.log(results);
5
atiq1589 3 अप्रैल 2018, 05:34

निम्नलिखित के रूप में प्रयास करें ==>

function getDuplicate( arr ){
    let obj = {}, dup = [];
    for(let i = 0, l = arr.length; i < l; i++){
        let val = arr[i];
        if( obj[val] /**[hasOwnProperty]*/ ) {
            /**[is exists]*/
            if(dup.find(a => a == val) ) continue;
            /**[put Unique One]*/
            dup.push(val);
            continue;
        };
        /**[hold for further use]*/
        obj[val] = true;
    }
    return dup;
};

==> . का प्रयोग करें

getDuplicate([100,100,200,200,200,300,300,300,400,400,400]);
0
rktuxyn 4 अप्रैल 2018, 12:36

निम्नलिखित यह मानकर चाल चलेगा कि गिरफ्तारी में सभी आइटम संख्याएँ हैं:

//added some numbers assuming numbers are not sorted
var arr = [300,400,200,100,100,200,200,200,300,300,300,400,400,400];

var obj = arr.reduce(//reduce arr to object of: {"100":2,"200":4,"300":4,"400":4}
  (o,key)=>{//key is 100,200, ... o is {"100":numberOfOccurrences,"200":numberOf...}
    o[key] = (o[key])?o[key]+1:1;
    return o;
  },
  {}
);
// obj is now: {"100":2,"200":4,"300":4,"400":4}
//create an array of [{key:100,occurs:2},{key:200,occurs:4}...
var sorted = Object.keys(obj).map(
  key=>({key:parseInt(key),occurs:obj[key]})
)//sort the [{key:100,occurs:2},... by highest occurrences then lowest key
.sort(
  (a,b)=>
    (b.occurs-a.occurs===0)
      ? a.key - b.key
      : b.occurs - a.occurs
);
console.log(
  sorted.filter(//only the highest occurrences
    item=>item.occurs===sorted[0].occurs
  ).map(//only the number; not the occurrences
    item=>item.key
  )
);
1
HMR 3 अप्रैल 2018, 06:58

for..in का उपयोग करके किसी सरणी को पुनरावृत्त करना एक अच्छा विचार नहीं है। अधिक जानकारी के लिए यह लिंक देखें। .

उम्मीद है कि नीचे का स्निपेट उपयोगी होगा

var arr = [100, 100, 200, 200, 200, 300, 300, 300, 400, 400, 400];
//Use a reduce fuction to create an object where 100,200,300 
// will be keys and its value will the number of times it has 
//repeated
var m = arr.reduce(function(i, v) {
  if (i[v] === undefined) {
    i[v] = 1
  } else {
    i[v] = i[v] + 1;
  }
  return i;
}, {});
// Now get the maximum value from that object,
//getMaxRepeated will be 3 in this case

var getMaxRepeated = Math.max(...Object.values(m));
//An array to hold elements which are repeated 'getMaxRepeated' times
var duplicateItems = [];

// now iterate that object and push the keys which are repeated
//getMaxRepeated times
for (var keys in m) {
  if (m[keys] === getMaxRepeated) {
    duplicateItems.push(keys)
  }
}
console.log(duplicateItems)
1
brk 3 अप्रैल 2018, 06:24

सबसे दोहराए गए मानों की अनुक्रमणिका वाले सरणी को पुनरावृत्त करने वाला ऑब्जेक्ट बनाएं, जैसे नीचे

var arr = [100,100,200,200,200,300,300,300,400,400,400];
valObj = {}, max_length = 0, rep_arr = [];

arr.forEach(function(el,i){
   if(valObj.hasOwnProperty(el)){
       valObj[el] += 1;
       max_length = (valObj[el] > max_length) ? valObj[el] : max_length
   }
   else{
       valObj[el] = 1;
   }
});

Object.keys(valObj).forEach(function(val){
    (valObj[val] >= max_length) && (rep_arr.push(val))
});
console.log(rep_arr);

ऑब्जेक्ट को सरणी मान के रूप में कुंजी के साथ बनाया गया है और उस मान के सरणी अनुक्रमणिका के रूप में मान, आप उसे चला सकते हैं/पार्स कर सकते हैं। उम्मीद है की यह मदद करेगा।

1
Venkata Sandeep 3 अप्रैल 2018, 06:04