【问题标题】:How to find the number of times a key occurs in a JSON object or array — JavaScript如何查找键在 JSON 对象或数组中出现的次数 - JavaScript
【发布时间】:2017-09-21 11:30:01
【问题描述】:

例如,我有一个这样的 JSON 对象,如何查找 key:"StateID" 出现了多少次?

[{"StateID":"42","State_name":"Badakhshan","CountryID":"1"},
{"StateID":"43","State_name":"Badgis","CountryID":"1"},
{"StateID":"44","State_name":"Baglan","CountryID":"1"},
{"StateID":"45","State_name":"Balkh","CountryID":"1"},
{"StateID":"46","State_name":"Bamiyan","CountryID":"1"},
{"StateID":"47","State_name":"Farah","CountryID":"1"},
{"StateID":"48","State_name":"Faryab","CountryID":"1"},
{"StateID":"49","State_name":"Gawr","CountryID":"1"},
{"StateID":"50","State_name":"Gazni","CountryID":"1"},
{"StateID":"51","State_name":"Herat","CountryID":"1"},
{"StateID":"52","State_name":"Hilmand","CountryID":"1"},
{"StateID":"53","State_name":"Jawzjan","CountryID":"1"},
{"StateID":"54","State_name":"Kabul","CountryID":"1"},
{"StateID":"55","State_name":"Kapisa","CountryID":"1"},
{"StateID":"56","State_name":"Khawst","CountryID":"1"},
{"StateID":"57","State_name":"Kunar","CountryID":"1"},
{"StateID":"58","State_name":"Lagman","CountryID":"1"},
{"StateID":"59","State_name":"Lawghar","CountryID":"1"},
{"StateID":"60","State_name":"Nangarhar","CountryID":"1"},
{"StateID":"61","State_name":"Nimruz","CountryID":"1"},
{"StateID":"62","State_name":"Nuristan","CountryID":"1"},
{"StateID":"63","State_name":"Paktika","CountryID":"1"},
{"StateID":"64","State_name":"Paktiya","CountryID":"1"},
{"StateID":"65","State_name":"Parwan","CountryID":"1"},
{"StateID":"66","State_name":"Qandahar","CountryID":"1"},
{"StateID":"67","State_name":"Qunduz","CountryID":"1"},
{"StateID":"68","State_name":"Samangan","CountryID":"1"},
{"StateID":"69","State_name":"Sar-e Pul","CountryID":"1"},
{"StateID":"70","State_name":"Takhar","CountryID":"1"},
{"StateID":"71","State_name":"Uruzgan","CountryID":"1"},
{"StateID":"72","State_name":"Wardag","CountryID":"1"},
{"StateID":"73","State_name":"Zabul","CountryID":"1"}]

【问题讨论】:

  • 所有的 id 都是唯一的吗?
  • 看起来每个数组项都有一个StateID,所以我会说array.length,在本例中为32
  • 是的,没错,但是如何计算长度
  • @NayanaMandhare,正如@Keith所说,你可以用array.length计算长度。
  • var states=JSON.parse(theJson); console.log(states.length);

标签: javascript json


【解决方案1】:

你可以通过以下方式做到这一点

let arr =[{"StateID":"42","State_name":"Badakhshan","CountryID":"1"},{"StateID":"43","State_name":"Badgis","CountryID":"1"},{"StateID":"44","State_name":"Baglan","CountryID":"1"},{"StateID":"45","State_name":"Balkh","CountryID":"1"},{"StateID":"46","State_name":"Bamiyan","CountryID":"1"},{"StateID":"47","State_name":"Farah","CountryID":"1"},{"StateID":"48","State_name":"Faryab","CountryID":"1"},{"StateID":"49","State_name":"Gawr","CountryID":"1"},{"StateID":"50","State_name":"Gazni","CountryID":"1"},{"StateID":"51","State_name":"Herat","CountryID":"1"},{"StateID":"52","State_name":"Hilmand","CountryID":"1"},{"StateID":"53","State_name":"Jawzjan","CountryID":"1"},{"StateID":"54","State_name":"Kabul","CountryID":"1"},{"StateID":"55","State_name":"Kapisa","CountryID":"1"},{"StateID":"56","State_name":"Khawst","CountryID":"1"},{"StateID":"57","State_name":"Kunar","CountryID":"1"},{"StateID":"58","State_name":"Lagman","CountryID":"1"},{"StateID":"59","State_name":"Lawghar","CountryID":"1"},{"StateID":"60","State_name":"Nangarhar","CountryID":"1"},{"StateID":"61","State_name":"Nimruz","CountryID":"1"},{"StateID":"62","State_name":"Nuristan","CountryID":"1"},{"StateID":"63","State_name":"Paktika","CountryID":"1"},{"StateID":"64","State_name":"Paktiya","CountryID":"1"},{"StateID":"65","State_name":"Parwan","CountryID":"1"},{"StateID":"66","State_name":"Qandahar","CountryID":"1"},{"StateID":"67","State_name":"Qunduz","CountryID":"1"},{"StateID":"68","State_name":"Samangan","CountryID":"1"},{"StateID":"69","State_name":"Sar-e Pul","CountryID":"1"},{"StateID":"70","State_name":"Takhar","CountryID":"1"},{"StateID":"71","State_name":"Uruzgan","CountryID":"1"},{"StateID":"72","State_name":"Wardag","CountryID":"1"},{"StateID":"73","State_name":"Zabul","CountryID":"1"}]







let result = arr.reduce((a,b) => {
    a[b.StateID] = a[b.StateID] || 0;
    a[b.StateID]++;
    return a;
}, {});

console.log(result);

【讨论】:

  • 它给我错误 Uncaught TypeError: res1.forEach is not a function at Object.success
  • 你的情况下 res1 是什么?
【解决方案2】:

您可以使用filter 创建一个数组,其中包含具有您感兴趣的属性的项目并返回长度。

const
  source = [ {"StateID":"42","State_name":"Badakhshan","CountryID":"1"}, {"StateID":"43","State_name":"Badgis","CountryID":"1"}, {"StateID":"44","State_name":"Baglan","CountryID":"1"}, {"StateID":"45","State_name":"Balkh","CountryID":"1"}, {"StateID":"46","State_name":"Bamiyan","CountryID":"1"}, {"StateID":"47","State_name":"Farah","CountryID":"1"}, {"StateID":"48","State_name":"Faryab","CountryID":"1"}, {"StateID":"49","State_name":"Gawr","CountryID":"1"}, {"StateID":"50","State_name":"Gazni","CountryID":"1"}, {"StateID":"51","State_name":"Herat","CountryID":"1"}, {"StateID":"52","State_name":"Hilmand","CountryID":"1"}, {"StateID":"53","State_name":"Jawzjan","CountryID":"1"}, {"StateID":"54","State_name":"Kabul","CountryID":"1"}, {"StateID":"55","State_name":"Kapisa","CountryID":"1"}, {"StateID":"56","State_name":"Khawst","CountryID":"1"}, {"StateID":"57","State_name":"Kunar","CountryID":"1"}, {"StateID":"58","State_name":"Lagman","CountryID":"1"}, {"StateID":"59","State_name":"Lawghar","CountryID":"1"}, {"StateID":"60","State_name":"Nangarhar","CountryID":"1"}, {"StateID":"61","State_name":"Nimruz","CountryID":"1"}, {"StateID":"62","State_name":"Nuristan","CountryID":"1"}, {"StateID":"63","State_name":"Paktika","CountryID":"1"}, {"StateID":"64","State_name":"Paktiya","CountryID":"1"}, {"StateID":"65","State_name":"Parwan","CountryID":"1"}, {"StateID":"66","State_name":"Qandahar","CountryID":"1"}, {"StateID":"67","State_name":"Qunduz","CountryID":"1"}, {"StateID":"68","State_name":"Samangan","CountryID":"1"}, {"StateID":"69","State_name":"Sar-e Pul","CountryID":"1"}, {"StateID":"70","State_name":"Takhar","CountryID":"1"}, {"StateID":"71","State_name":"Uruzgan","CountryID":"1"}, {"StateID":"72","State_name":"Wardag","CountryID":"1"}, {"StateID":"73","State_name":"Zabul","CountryID":"1"} ];
  
/**
 * Returns the number of objects in the array that have a specific property.
 *
 * @param {Array} array          The array whose items to check for the 
 *                               existence of a property.
 * @param {String} propertyName  The name of the property the check for on 
 *                               the objects in the array.
 *
 * @returns {Number} The method returns the number of objects in the array 
 *                   that have the specified property.
 */
function countPropertyOccurence(array, propertyName) {
  const
    matchingItems = array.filter(item => item[propertyName] !== undefined);
    
  return matchingItems.length;
}

console.log(`Number of times "StateID" occurs: ${countPropertyOccurence(source, 'StateID')}`);

【讨论】:

    【解决方案3】:
    var a = 0;
    for (var i=0; i < obj.length; i++) {
    if (obj[i].stateId) {
    a++;
    }
    }
    console.log("count a",a);
    

    【讨论】:

      【解决方案4】:

      可能是这样的:

      var data = [your data here];
      console.log('Count', data.filter(function(obj){ return Object.keys(obj).indexOf('StateID') !== -1; }).length);
      

      【讨论】:

      • 应该是StateID 而不是StateId
      【解决方案5】:

      十几种方法中的一种,请参阅其他解决方案的其他答案。

      如果 StateID 存在且大于 0,则使用 Array.prototype.forEach 循环检查。

      obj = [{"StateID":"42","State_name":"Badakhshan","CountryID":"1"},
      {"StateID":"43","State_name":"Badgis","CountryID":"1"},
      {"StateID":"44","State_name":"Baglan","CountryID":"1"},
      {"StateID":"45","State_name":"Balkh","CountryID":"1"},
      {"StateID":"46","State_name":"Bamiyan","CountryID":"1"},
      {"StateID":"47","State_name":"Farah","CountryID":"1"},
      {"StateID":"48","State_name":"Faryab","CountryID":"1"},
      {"StateID":"49","State_name":"Gawr","CountryID":"1"},
      {"StateID":"50","State_name":"Gazni","CountryID":"1"},
      {"StateID":"51","State_name":"Herat","CountryID":"1"},
      {"StateID":"52","State_name":"Hilmand","CountryID":"1"},
      {"StateID":"53","State_name":"Jawzjan","CountryID":"1"},
      {"StateID":"54","State_name":"Kabul","CountryID":"1"},
      {"StateID":"55","State_name":"Kapisa","CountryID":"1"},
      {"StateID":"56","State_name":"Khawst","CountryID":"1"},
      {"StateID":"57","State_name":"Kunar","CountryID":"1"},
      {"StateID":"58","State_name":"Lagman","CountryID":"1"},
      {"StateID":"59","State_name":"Lawghar","CountryID":"1"},
      {"StateID":"60","State_name":"Nangarhar","CountryID":"1"},
      {"StateID":"61","State_name":"Nimruz","CountryID":"1"},
      {"StateID":"62","State_name":"Nuristan","CountryID":"1"},
      {"StateID":"63","State_name":"Paktika","CountryID":"1"},
      {"StateID":"64","State_name":"Paktiya","CountryID":"1"},
      {"StateID":"65","State_name":"Parwan","CountryID":"1"},
      {"StateID":"66","State_name":"Qandahar","CountryID":"1"},
      {"StateID":"67","State_name":"Qunduz","CountryID":"1"},
      {"StateID":"68","State_name":"Samangan","CountryID":"1"},
      {"StateID":"69","State_name":"Sar-e Pul","CountryID":"1"},
      {"StateID":"70","State_name":"Takhar","CountryID":"1"},
      {"StateID":"71","State_name":"Uruzgan","CountryID":"1"},
      {"StateID":"72","State_name":"Wardag","CountryID":"1"},
      {"StateID":"73","State_name":"Zabul","CountryID":"1"}];
      
      var count = 0;
      obj.forEach(function(value){
          value.StateID > 0 ? count++ : null;
      });
      console.log(count);

      【讨论】:

      • 它给我错误 Uncaught TypeError: res1.forEach is not a function at Object.success
      • 那么res1 不是数组。大概是一个字符串,需要用JSON.parse解析成一个数组。
      猜你喜欢
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2021-04-25
      • 2021-10-30
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多