如何在Javascript中创建另一个数组's重复值的数组
How do I make an array of another array's duplicate values only in Javascript?
我有一个数组,其中包含来自多个公司的注册者(有些来自同一家公司,有些不是),我需要计算来自同一家公司的注册人数。所以我需要一个数字来告诉我有多少额外的人(在第一个之后)来自不同的公司已经注册。
假设我有一个数组:
var company_names = ['acme', 'acme', 'bobo', 'comanche', 'acme', 'comanche'];
和一个变量:
var companies_eligible_for_discount = 0;
我如何计算分配的3个折扣?("acme"为2,"comanche"为1)
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;
}
我提供了一个代码片段,您可以在控制台中运行它来测试该功能,并创建了一个可以立即使用的演示函数(删除console.log语句)。它返回一个公司名称数组。
实际上,我正在做的是使用Javascript具有对象的本机关联数组这一事实,因此我将toLowerCase
字段名(在您的情况下是公司)分配为关联数组查找点的字段。如果字段名还不是属性,那么这是我们第一次添加它。当我们第一次添加1时(考虑"bobo"),我们将其设置为0。
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 );
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript