如何在json对象

时间:2017-05-18 08:32:16

标签: javascript jquery json ajax

我从数据库中获取json对象。计算ClassDefA , B , C数量的最佳做法是什么 在json对象中,例如:我在这个json" 2 A和2 B和3 c"

我的json对象:

[{
    "ItemCode": "200500303800356",
    "LastCost": 8,
    "OnHand": 593889,
    "InventoryValue": 4751112,
    "PercOfTotalInventory": 18.294517,
    "CumerativePercTotal": 18.29,
    "ClassDef": "A"
}, {
    "ItemCode": "201600701800197",
    "LastCost": 400,
    "OnHand": 300,
    "InventoryValue": 120000,
    "PercOfTotalInventory": 0.462069,
    "CumerativePercTotal": 75.68,
    "ClassDef": "A"
}, {
    "ItemCode": "200701507000107",
    "LastCost": 75,
    "OnHand": 239,
    "InventoryValue": 17925,
    "PercOfTotalInventory": 0.069022,
    "CumerativePercTotal": 91.75,
    "ClassDef": "B"
}, {
    "ItemCode": "200501303400308",
    "LastCost": 3515,
    "OnHand": 5,
    "InventoryValue": 17575,
    "PercOfTotalInventory": 0.067674,
    "CumerativePercTotal": 91.81,
    "ClassDef": "B"
}, {
    "ItemCode": "200200106701035",
    "LastCost": 80,
    "OnHand": 27,
    "InventoryValue": 2160,
    "PercOfTotalInventory": 0.008317,
    "CumerativePercTotal": 99.28,
    "ClassDef": "C"
}, {
    "ItemCode": "200200902700248",
    "LastCost": 10,
    "OnHand": 213,
    "InventoryValue": 2130,
    "PercOfTotalInventory": 0.008202,
    "CumerativePercTotal": 99.29,
    "ClassDef": "C"
}, {
    "ItemCode": "200601302001093",
    "LastCost": 0.3,
    "OnHand": 6,
    "InventoryValue": 1.8,
    "PercOfTotalInventory": 0.000007,
    "CumerativePercTotal": 100,
    "ClassDef": "C"
}]

有没有人知道如何做到这一点?

6 个答案:

答案 0 :(得分:1)

试试这个以查找次数

  • ClassDef 等于 C
  • ClassDef 等于 C B



var arr=[{ItemCode:"200500303800356",LastCost:8,OnHand:593889,InventoryValue:4751112,PercOfTotalInventory:18.294517,CumerativePercTotal:18.29,ClassDef:"A"},{ItemCode:"201600701800197",LastCost:400,OnHand:300,InventoryValue:12e4,PercOfTotalInventory:.462069,CumerativePercTotal:75.68,ClassDef:"A"},{ItemCode:"200701507000107",LastCost:75,OnHand:239,InventoryValue:17925,PercOfTotalInventory:.069022,CumerativePercTotal:91.75,ClassDef:"B"},{ItemCode:"200501303400308",LastCost:3515,OnHand:5,InventoryValue:17575,PercOfTotalInventory:.067674,CumerativePercTotal:91.81,ClassDef:"B"},{ItemCode:"200200106701035",LastCost:80,OnHand:27,InventoryValue:2160,PercOfTotalInventory:.008317,CumerativePercTotal:99.28,ClassDef:"C"},{ItemCode:"200200902700248",LastCost:10,OnHand:213,InventoryValue:2130,PercOfTotalInventory:.008202,CumerativePercTotal:99.29,ClassDef:"C"},{ItemCode:"200601302001093",LastCost:.3,OnHand:6,InventoryValue:1.8,PercOfTotalInventory:7e-6,CumerativePercTotal:100,ClassDef:"C"}];

function countOccurences(name, value) {
  var count = 0;
  // If name and values are defined
  if (name && value) {
    // Check either a single value or an array of values
    var values = (value instanceof Array ? value : [value])
    // For each object in array
    arr.forEach(function(v) {
      // If values array contains object[name] value
      if (v[name] && values.indexOf(v[name]) !== -1) {
        // Increment counter
        count++;
      }
    });
  }
  return count;
}

console.log("ClassDef === 'C' :", countOccurences("ClassDef", "C"));
console.log("ClassDef === 'C' or 'B' :", countOccurences("ClassDef", ["C", "B"]));




答案 1 :(得分:1)

通过巧妙地使用.reduce()Set,这是小菜一碟。

const objArray = [{
    "ItemCode": "200500303800356",
    "LastCost": 8,
    "OnHand": 593889,
    "InventoryValue": 4751112,
    "PercOfTotalInventory": 18.294517,
    "CumerativePercTotal": 18.29,
    "ClassDef": "A"
}, ...];

const classDefSet = objArray.reduce((set, obj) => {
    set.add(obj.ClassDef); // add value to the set. If it already exists nothing will happen
    return set;
}, new Set());

const count = [...classDefSet].length; // convert set to plain array
console.log(count); // 3

答案 2 :(得分:1)

您可以使用对象作为结果,并使用ClassDef作为密钥。



var data = [{ ItemCode: "200500303800356", LastCost: 8, OnHand: 593889, InventoryValue: 4751112, PercOfTotalInventory: 18.294517, CumerativePercTotal: 18.29, ClassDef: "A" }, { ItemCode: "201600701800197", LastCost: 400, OnHand: 300, InventoryValue: 120000, PercOfTotalInventory: 0.462069, CumerativePercTotal: 75.68, ClassDef: "A" }, { ItemCode: "200701507000107", LastCost: 75, OnHand: 239, InventoryValue: 17925, PercOfTotalInventory: 0.069022, CumerativePercTotal: 91.75, ClassDef: "B" }, { ItemCode: "200501303400308", LastCost: 3515, OnHand: 5, InventoryValue: 17575, PercOfTotalInventory: 0.067674, CumerativePercTotal: 91.81, ClassDef: "B" }, { ItemCode: "200200106701035", LastCost: 80, OnHand: 27, InventoryValue: 2160, PercOfTotalInventory: 0.008317, CumerativePercTotal: 99.28, ClassDef: "C" }, { ItemCode: "200200902700248", LastCost: 10, OnHand: 213, InventoryValue: 2130, PercOfTotalInventory: 0.008202, CumerativePercTotal: 99.29, ClassDef: "C" }, { ItemCode: "200601302001093", LastCost: 0.3, OnHand: 6, InventoryValue: 1.8, PercOfTotalInventory: 0.000007, CumerativePercTotal: 100, ClassDef: "C" }],
    result = data.reduce(function (r, o) {
        r[o.ClassDef] = (r[o.ClassDef] || 0) + 1;
        return r;
    }, Object.create(null));

console.log(result);




答案 3 :(得分:1)

另一个reduce示例:



let arr = [{
"ItemCode": "200500303800356",
"LastCost": 8,
"OnHand": 593889,
"InventoryValue": 4751112,
"PercOfTotalInventory": 18.294517,
"CumerativePercTotal": 18.29,
"ClassDef": "A"
}, {
"ItemCode": "201600701800197",
"LastCost": 400,
"OnHand": 300,
"InventoryValue": 120000,
"PercOfTotalInventory": 0.462069,
"CumerativePercTotal": 75.68,
"ClassDef": "A"
 }, {
"ItemCode": "200701507000107",
"LastCost": 75,
"OnHand": 239,
"InventoryValue": 17925,
"PercOfTotalInventory": 0.069022,
"CumerativePercTotal": 91.75,
"ClassDef": "B"
 }, {
"ItemCode": "200501303400308",
"LastCost": 3515,
"OnHand": 5,
"InventoryValue": 17575,
"PercOfTotalInventory": 0.067674,
"CumerativePercTotal": 91.81,
"ClassDef": "B"
 },  {
"ItemCode": "200200106701035",
"LastCost": 80,
"OnHand": 27,
"InventoryValue": 2160,
"PercOfTotalInventory": 0.008317,
"CumerativePercTotal": 99.28,
"ClassDef": "C"
 }, {
"ItemCode": "200200902700248",
"LastCost": 10,
"OnHand": 213,
"InventoryValue": 2130,
"PercOfTotalInventory": 0.008202,
"CumerativePercTotal": 99.29,
"ClassDef": "C"
 },  {
"ItemCode": "200601302001093",
"LastCost": 0.3,
"OnHand": 6,
"InventoryValue": 1.8,
"PercOfTotalInventory": 0.000007,
"CumerativePercTotal": 100,
"ClassDef": "C"
}];

let result = arr.reduce((acc, el)=>{
  if (el.hasOwnProperty("ClassDef")){
    if (!acc.hasOwnProperty(el.ClassDef)){
      acc[el.ClassDef] = 0;
    }
    acc[el.ClassDef]++;
  }
  return acc;
}, {});

console.log(result);




答案 4 :(得分:0)

这对你有用。您可以计算分配给键的值" ClassDef"如此处所示the count of the duplicate value assigned to the same key in JSON array

答案 5 :(得分:0)

使用示例json对象,试试这个:

var countArr = [];
for(i = 0; i < obj.length; i++)
{
    var val =  obj[i]["ClassDef"];
    if(countArr[val] != null)
    {
        countArr[val] += 1;
    }
    else
    {
        countArr[val] = 1;
    }

}

这会让你回头

[A: 2, B: 2, C: 3]