如何在jquery json中增加自定义计数

how to increase custom count in jquery json

本文关键字:增加 自定义 json jquery      更新时间:2023-09-26

如果笔记本电脑型号和序列号相同,我必须添加新字段totalModel并增加计数。例如,在下面的情况下:serialid"1"和笔记本电脑型号"xyz"来了两次,所以我想添加"totalModel"计数为2,等等。如何在jquery中实现

这个问题不是关于jQuery的,而是关于映射和过滤数组和对象的。但是,我们可以使用jQuery的一些方便的方法来解决。

解决这些问题的很大一部分是通过正确定义你想要做什么。从您的问题听起来,您希望获得每个笔记本电脑型号的唯一串行id的映射。我们可以使用JavaScript的Array.prototype.reduce来生成这样一个映射(注意,我们将获取我们遇到的每个笔记本电脑型号的第一个'sold'值):

var laptop_models = data.reduce(function (memo, obj) {
    if (!memo[obj.laptopModel]) {
        memo[obj.laptopModel] = {
            unique_serial_ids: [],
            sold: obj.sold
        };
    }
    if ($.inArray(obj.serialid, memo[obj.laptopModel].unique_serial_ids) === -1) {
        memo[obj.laptopModel].unique_serial_ids.push(obj.serialid);
    }
    return memo;
}, {});

接下来,我们可以将laptop_models对象映射到您指定的预期结果数组中:

var result = $.map(laptop_models, function (laptop_model, model_name) {
    return {
        laptopModel: model_name,
        totalModel: laptop_model.unique_serial_ids.length,
        sold: laptop_model.sold
    };
});

你已经明白了。遍历数组。

var hash = {};
for (var i = 0;i<data.length;i++) {
  if (hash[data[i].laptopModel) {
     hash[data[i].laptopModel]++;
  }
  else
     hash[data[i].laptopModel] = 1;
}

var data = [
          {
            "serialid": 1,
            "laptopModel": "xyz",
            "sold": "yes",
            "cnt": 5
          },
          {
            "serialid" :1,
            "laptopModel": "xyz",
            "sold": "yes",
            "cnt": 4
          },
          {
            "serialid": 1,
            "laptopModel": "abc",
            "sold": "yes",
            "cnt": 3
          },
          {
            "serialid": 3,
            "laptopModel": "xyz",
            "sold": "yes",
            "cnt": 2
          }];
var result = []; //work if result = {};
var tempArray = []; // used to store unique name to prevent complex loop
data.forEach(function(item){
      if($.inArray(item.laptopModel, tempArray)< 0){// unique name
          result.push(formatData(item));
          tempArray.push(item.laptopModel);
        }
  else{
       var indexNew =  $.inArray(item.laptopModel, tempArray); 
       result[indexNew]["totalModel"] += 1;
     }
  });
function formatData(item){
 return{
    "laptopModel": item.laptopModel,
    "sold": item.sold,
    "totalModel": 1
   }
}
alert(JSON.stringify(result)); //expect array 2 item but it's empty array
console.log(result); //Will have result 2 item when I view console window
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>