繁体   English   中英

JavaScript-计算字符串的出现

[英]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.reducecount的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM