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 );