4 Stimmen

Wie mache ich ein Array eines anderen Arrays doppelte Werte nur in Javascript?

Ich habe ein Array mit Registranten aus mehreren Unternehmen (einige aus demselben Unternehmen, einige nicht) und muss zählen, wie viele Personen aus demselben Unternehmen sich registriert haben. Ich brauche also eine Zahl, die mir sagt, wie viele zusätzliche Personen (nach der ersten) von einzelnen Unternehmen sich registriert haben.

Angenommen, ich habe ein Array:

var company_names = ['acme', 'acme', 'bobo', 'comanche', 'acme', 'comanche'];

und eine Variable:

var companies_eligible_for_discount = 0;

Wie würde ich zählen, dass 3 Rabatte zu vergeben sind (2 für "acme" und 1 für "comanche")?

5voto

RightSaidFred Punkte 10871
var dupes = {};

company_names.forEach(function(v,i) {
    if( v in dupes ) {
        dupes[v]++;
        companies_eligible_for_discount++;
    }
    else dupes[v] = 0;
});

var dupes = {}, v, i;

for( i = 0; i < company_names.length; ++i ) {
    v = company_names[i];
    if( v in dupes ) {
        dupes[v]++;
        companies_eligible_for_discount++;
    }
    else dupes[v] = 0;
}

0voto

jcolebrand Punkte 16102

Ich habe ein Snippet zur Verfügung gestellt, das Sie in Ihrer Konsole ausführen können, um die Funktionalität zu testen, und eine Demofunktion erstellt, die Sie sofort verwenden können (ohne console.log-Anweisungen). Sie gibt ein Array von Unternehmensnamen zurück.

Effektiv, was ich tue, ist mit der Tatsache, dass Javascript hat native assoziative Arrays für Objekte, so dass ich zuweisen die toLowerCase Feldname (in Ihrem Fall das Unternehmen) als Feld für den assoziativen Array-Nachschlagepunkt. Wenn der Feldname nicht bereits eine Eigenschaft ist, dann ist dies das erste Mal, dass wir ihn hinzufügen. Bei der ersten Hinzufügung (z. B. "bobo") setzen wir ihn auf Null. Bei den folgenden Malen wird er um eins erhöht.

function getCompaniesOver(companyArray, discountMinimum){
  var tallyObject = {},
      retArray = [],
      has = Object.prototype.hasOwnProperty; //I'm making sure that we have a clean reference to the hasOwnProperty
  for(var k in companyArray){
    var s = companyArray[k]+''; s = s.toLowerCase();
    if (has.call(tallyObject,s)){
      tallyObject[s]++;
    } else {
      tallyObject[s] = 0;
    }
  }

  console.log(tallyObject); // for debugging insepection.

  console.log('companies with ' +companies_eligible_for_discount+ ' number of employees above 1 attending')
  console.log('--------')
  for (var k in tallyObject){
    if (tallyObject[k] >= companies_eligible_for_discount){
       console.log(k);
       retArray.push(k);
    }
  }
  console.log('--------')

  return retArray;
}

var company_names_long = ['acme', 'acme', 'bobo', 'comanche', 'acme', 'comanche', 'comanche', 'acme', 'sanford & sons', 'Sanford & Sons', 'Johnson&Johnson', 'johnson&johnson'];

var company_names = ['acme', 'acme', 'bobo', 'comanche', 'acme', 'comanche'],
    companies_eligible_for_discount = 2; //this is the range you can supply

 getCompaniesOver(company_names, companies_eligible_for_discount );

 companies_eligible_for_discount = 1;
 getCompaniesOver(company_names_long, companies_eligible_for_discount );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X