Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按对象属性分组_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript按对象属性分组

Javascript按对象属性分组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,下面是一组对象 var inventory = [ { Name: "KIT001", SerialNo: "K111", Status: "Out For Cleaning", NewStatus: "Cleaned" }, { Name: "KIT001", SerialNo: "K112", Status: "Out For Cleaning", NewStatus: "Cleaned" }, { Name: "KIT001", SerialNo: "K113",

下面是一组对象

var inventory = [
    { Name: "KIT001", SerialNo: "K111", Status: "Out For Cleaning", NewStatus: "Cleaned" },
    { Name: "KIT001", SerialNo: "K112", Status: "Out For Cleaning", NewStatus: "Cleaned" },
    { Name: "KIT001", SerialNo: "K113", Status: "Out For Cleaning", NewStatus: "Cleaned" },
    { Name: "KIT001", SerialNo: "K132", Status: "Out For Cleaning", NewStatus: "Need Cleaning" },
    { Name: "KIT001", SerialNo: "K134", Status: "Out For Cleaning", NewStatus: "Need Cleaning" },
];
我希望通过“OutforCleaning”和“Cleaned”进行分组,这样最终结果将返回多个数组,如下所示:

var arr1 = [
    { Name: "KIT001", SerialNo: "K111", Status: "Out For Cleaning", NewStatus: "Cleaned" },
    { Name: "KIT001", SerialNo: "K112", Status: "Out For Cleaning", NewStatus: "Cleaned" },
    { Name: "KIT001", SerialNo: "K113", Status: "Out For Cleaning", NewStatus: "Cleaned" },
];

var arr2 = [
    { Name: "KIT001", SerialNo: "K132", Status: "Out For Cleaning", NewStatus: "Need Cleaning" },
    { Name: "KIT001", SerialNo: "K134", Status: "Out For Cleaning", NewStatus: "Need Cleaning" },
];
更新

我需要先按状态分组,然后按新状态分组。请注意,这些数组将是动态的

var STATUS = ["Out For Cleaning", "Out For Repair"];
var NEW_STATUS = ["Cleaned", "Repaired"];
这是我想到的,但是,它只按STATUS属性分组

for (var i = 0; i < STATUS.length; i++) {
          var arr1 = inventory.filter(function (el) {
               return el.Status == STATUS[i];
          });

          if(arr1.length > 0)
               console.log('Final Array: ', arr1)              
}
for(变量i=0;i0)
log('Final Array:',arr1)
}

一种方法是过滤阵列:

var arr1 = status.filter(function(el) {
    return el.NewStatus == "Cleaned";
});

var arr2 = status.filter(function(el) {
    return el.NewStatus == "Need Cleaning";
});

这就是我要做的:

function GroupBy(array){
  var fields = Array.prototype.slice.call(arguments, 1);
  var field = fields.shift();

  if(field){

    var groupedArray = [];
    for(var i in array){
      var index = array[i][field];
      groupedArray[index] = groupedArray[index] || [];
      groupedArray[index].push(array[i]);
    }

    for(var i in groupedArray)
      groupedArray[i] = GroupBy.bind(null, groupedArray[i]).apply(null, fields);

    return groupedArray;
  }

  return array;
}
然后像这样使用它。按字段对记录进行分组:

var groupedArray = GroupBy(yourArray, "STATUS", "NEW_STATUS");
然后按指定字段获取记录:

var list = groupedArray["Out For Cleaning"]["Need Cleaning"];
for(变量i=0;i
你能用下划线吗?我不能用下划线。你答案的可能重复帮助我开始了。
for (var i = 0; i < STATUS.length; i++) {

  var arr1 = inventory.filter(function(el) {
      return el.NewStatus == NEW_STATUS[i-1];
      console.log(el.NewStatus);
  });

  document.getElementById("grey").innerHTML =JSON.stringify(arr1);

  var arr2 = inventory.filter(function(el) {
      return el.NewStatus == NEW_STATUS[i];
  });

  document.getElementById("blue").innerHTML =JSON.stringify(arr2);

}