[英]JavaScript - count occurrence of strings
我正在计算JSON中某些字符串的出现-在这种情况下是sensorUUID
。
var newDataArray = JSON.stringify(conData);
JSON格式
[{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362037.111941,"uID":"22489710_3_10"},{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362036.109874,"uID":"22489710_3_10"}]
我试过下面的代码,但它返回一个空对象。
var obj = {};
for (var i = 0, j = newDataArray.length; i < j; i++) {
if (obj[newDataArray[i].sensorUUID]) {
obj[newDataArray[i]]++;
}
}
console.log(obj);
完整的JSON文件中将包含多个传感器ID,我希望返回唯一传感器ID的数量。
例如
22489710有10次出现
63846683有23次出现
等等
for循环中的if条件正确,但是第一次找到特定的sensorUUID时必须将count初始化为1。
var newDataArray = [{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362037.111941,"uID":"22489710_3_10"},{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362036.109874,"uID":"22489710_3_10"}]; var obj = {}; for (var i = 0, j = newDataArray.length; i < j; i++) { if (obj[newDataArray[i].sensorUUID]) { obj[newDataArray[i].sensorUUID]++; }else{ obj[newDataArray[i].sensorUUID] = 1; } } // obj gives you count for each unique sensorUUID. console.log(obj); //if you want total count of all sensorUUID you can sum all the values in obj. var count = Object.values(obj).reduce((a, b) => a + b, 0); console.log(count);
你可以通过简单地重复json
阵列使用array.reduce
和count
的occurances sensorUUID
并将其存储在新的对象内。
var json = [{ "blobJson": "x", "deviceMfg": 10, "eventCode": 0, "sensorClass": 3, "sensorUUID": "22489710", "timeStamp": 1500362037.111941, "uID": "22489710_3_10" }, { "blobJson": "x", "deviceMfg": 10, "eventCode": 0, "sensorClass": 3, "sensorUUID": "22489710", "timeStamp": 1500362037.111941, "uID": "22489710_3_10" }, { "blobJson": "x", "deviceMfg": 10, "eventCode": 0, "sensorClass": 3, "sensorUUID": "22489710123", "timeStamp": 1500362036.109874, "uID": "22489710_3_10" }]; let count = json.reduce((newObj, obj) => { if(newObj[obj.sensorUUID]) { newObj[obj.sensorUUID] = newObj[obj.sensorUUID]+1; } else { newObj[obj.sensorUUID] = 1; } return newObj; }, {}); console.log(count);
您可以设置变量计数并使用Array#forEach遍历数组,并使用Object#hasOwnProperty检查对象是否具有sensorUUID属性(如果是),增加计数
var data = [{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362037.111941,"uID":"22489710_3_10"},{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362036.109874,"uID":"22489710_3_10"}]; var count = 0; data.forEach((x)=>{ if(x.hasOwnProperty('sensorUUID')) count++; }); console.log(count);
https://jsfiddle.net/7jjoches/1/
使用jquery方法$ .parseJSON,您必须将JSON字符串转换为JSON对象,然后才可以使用它。
var conData = '[{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362037.111941,"uID":"22489710_3_10"},{"blobJson":"x","deviceMfg":10,"eventCode":0,"sensorClass":3,"sensorUUID":"22489710","timeStamp":1500362036.109874,"uID":"22489710_3_10"}]'; var newDataArray = $.parseJSON(conData); console.dir(newDataArray); var obj = {}; for (var i = 0; i< newDataArray.length; i++) { obj[newDataArray[i].sensorUUID] = obj[newDataArray[i].sensorUUID] ? obj[newDataArray[i].sensorUUID]+1 : 1; } console.log(obj);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.