如何统计数组 字符串 对象中某一元素出现的次数

如何统计数组中某一元素出现的次数,字符串元素出现的次数或者对象中某一属性值出现的次数呢?
对于统计数组中某一元素出现的次数,可以这样:

function arrNumber(arr){
var arr_number = {};
for(var i = 0 ; i < arr.length ; i++){
if(arr_number[arr[i]]){
arr_number[arr[i]]++
}
else{
arr_number[arr[i]] = 1 ;
}
}
return arr_number ;
}
var array = [1,3,5,3,5,3];
arrNumber(array); //输出{1: 1, 3: 3, 5: 2}


同理,统计字符串元素出现的次数:

function charNum(str){
var charObj={} //创建一个空对象
for(i=0,len=str.length;i<len;i++){
if(charObj[str[i]]){ //str[i]为key
charObj[str[i]]++; //charObj[str[i]]为value
}else{
charObj[str[i]]=1;
}
}
var strTem=""; // 临时变量
for(value in charObj){
strTem+='"'+value+'"的个数:'+charObj[value]+'\n';
}
return strTem;
}
document.write(charNum("11,23")); //"1"的个数:2 "2"的个数:1 "3"的个数:1 ","的个数:1


有没有更简单一点的方法呢?恩。。。有了,underscore中的countBy()方法可以帮我们解决这个问题。
对于统计数组元素出现的次数:

var array = [1,3,5,3,5,3];
_(array).countBy() // 输出{1: 1, 3: 3, 5: 2}

看,是不是很一步就搞定呐 :D
对于统计字符串元素出现的次数:

var array = "12121";
_(array).countBy()); // {1: 3, 2: 2}

数组和字符串统计元素出现的次数解决了,那对象呢?如何统计对象中某属性值出现的次数呢?
如:

var user_list =
[{"name":"王五","phone":"189900971077","price":"8"},
{"name":"李四","phone":"189900971078","price":"6"},
{"name":"张三","phone":"189900971079","price":"8"}];

怎么统计价钱出现的次数呢?
如果只是为了获取价钱出现的次数,可以先把价钱单独提出为一个新数组,然后按照上面统计数组元素的方法就可以了:
提取对象中某一属性值,可以用underscore中的pluck()方法。
 var price = _(user_list).pluck('price')  //["8", "6", "8"] 

然后对price运用countBy()方法就好了
_(price).countBy()  //{6: 1, 8: 2} 

可是我不仅想得到某价钱的人数,我还想知道出这个价钱有哪些人。那我该怎么办呢?。。。underscore来帮你!
 _(user_list).groupBy("price") 

输出结果:

{6: [{name: "李四", phone: "189900971078", price: "6"}] ,
8: [{name: "王五", phone: "189900971077", price: "8"},
{name: "张三", phone: "189900971079", price: "8"}]}

这时得到的是一个对象,key为价钱,value是此价钱对应的人员信息组成的数组。
如果我想得到价钱最低且不重复的出价人信息呢?首先当然是用sortBy()对user_list按价钱排序啦,然后用groupBy()按价钱分组,最后就是用find()方法找到value的长度为1的对象。(find()如果找到匹配的元素,函数将立即返回,不会遍历整个list。)这样连续使用多种方法,是不是需要定义很多变量呢?有没有什么方法可以简化呢?
underscore又来啦:
  
var lowest_price = _.chain(user_list)
.sortBy("price")
.groupBy("price")
.find(function(value){return value.length ==1 })
.value();

输出lowest_price:

[{name: "李四", phone: "189900971078", price: "6"}]
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值