唯一属性计数json

时间:2016-06-15 06:42:21

标签: javascript jquery json performance

我有一个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"]

6 个答案:

答案 0 :(得分: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);




答案 1 :(得分:0)

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. 创建新数组并检查数组中是否存在值,如果不推送值

答案 2 :(得分:0)

您可以使用forEach&amp; 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

答案 3 :(得分:0)

试试这个

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)
}

})

答案 4 :(得分:0)

这可以做一些优化的方式。您可以缓存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);

答案 5 :(得分:0)

你可以这样做:

.line:before {
  content: n;
}

希望它会有所帮助