【问题标题】:unique attribute count json唯一属性计数 json
【发布时间】:2016-06-15 06:42:20
【问题描述】:

我有一个json文件如下

 {"Teams": [
{"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
{"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
{"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
{"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
{"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
]}

提取 f3 的唯一属性值的最佳方法是什么。

在我们的示例中,我应该将唯一的 f3 属性存储在一个数组中,该数组应该有 ["Jun-2016","May-2016","Aug-2016"]

【问题讨论】:

    标签: javascript jquery json performance


    【解决方案1】:

    使用Array#reduce方法

    var data= {"Teams": [
    {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
    {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
    {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
    {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
    ]};
    
    var res = data.Teams.reduce(function(arr, ele) {
      // check element already exist if not push the value to the array
      if (arr.indexOf(ele.f3) === -1) arr.push(ele.f3);
      return arr;
      // set initial value as empty array
    }, []);
    
    console.log(res);

    【讨论】:

    • 您能否更改代码以将数据推送到 json 数组而不是数组结果应采用以下格式 {"f3":"Aug-2016","f3":"May-2016 ","f3":"Jun-2016"} ?
    • @user3349850:Json 数组? JSON.stringify(rs)
    • @user3349850 : {"f3":"Aug-2016","f3":"May-2016","f3":"Jun-2016"} == {"f3":"Jun-2016"} ,但这是可能的[{"f3":"Aug-2016"},{"f3":"May-2016"},{"f3":"Jun-2016"}]
    【解决方案2】:

    var arrnew = []
    
    
    var data = {
      "Teams": [{
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "May-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Aug-2016",
        "color": "R"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Jun-2016",
        "color": "R"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "May-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "May-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Jun-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Jun-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Aug-2016",
        "color": "R"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "May-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "Jun-2016",
        "color": "G"
      }, {
        "id": "1",
        "f1": "Currency",
        "f2": "All",
        "f3": "May-2016",
        "color": "G"
      }, ]
    }
    
    
    
    $.each(data.Teams, function(i, v) {
      
      if ($.inArray(v.f3, arrnew) == -1) {
        arrnew.push(v.f3);
      };
    
    })
    
    console.log(arrnew)
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    1. 迭代数据
    2. 创建新数组,如果不推送值,则检查数组中是否存在值

    【讨论】:

      【解决方案3】:

      您可以使用forEach & indexOf 方法来查找唯一的 f3 值

      var x= {"Teams": [
      {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
      {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
      {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
      {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
      ]}
      var _m =(x.Teams);
      var uniquef3 = [];
      _m.forEach(function(item){
       if(uniquef3.indexOf(item.f3) ==-1){
          uniquef3.push(item.f3)
       }
      
      })
      console.log(uniquef3)
      

      JSFIDDLE

      【讨论】:

        【解决方案4】:

        试试这个

        var x ={"Teams": [
        {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
        {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
        {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
        {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
        ]}
        
        newaArr =[]
        
        angular.forEach(x.Teams,function(val,index){
        if(newaArr.indexOf(val.f3) ==-1){
        newaArr.push(val.f3)
        }
        
        })
        

        【讨论】:

          【解决方案5】:

          这是可以做到的一些优化的方式。您可以缓存 f3 的唯一值。下次只需使用 javascript 的 hasOwnProperty 检查它们的存在。这将降低搜索存在的复杂性。

           var Teams = [
          {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
          {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
          {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
          {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
          ];
          
          var output=[];
          var cache = {};
          
          for(var i in Teams) {
            if(!cache.hasOwnProperty(Teams[i].f3)) {
              cache[Teams[i].f3] = null;
            }
          }
          for(var key in cache) {
            output.push(key);
          }
          console.log(output);
          

          【讨论】:

            【解决方案6】:

            你可以这样做:

            var unique={}
            var kt= {"Teams": [
            {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"R"},
            {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Aug-2016","color":"R"},
            {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"Jun-2016","color":"G"},
            {"id":"1","f1":"Currency","f2":"All","f3":"May-2016","color":"G"},
            ]};
            
            kt.Teams.forEach(function(value){unique[value.f3]=0;});
            console.log(Object.keys(unique));
            

            希望对你有帮助

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多