2015-10-05 70 views
-1

我有对象的下面的Javascript组通过对象属性

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" }, 
]; 

阵列我想通过“出用于清洁”和“干净的”做1组以这样的方式使得最终结果将返回多个像下面数组:

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" }, 
]; 

UPDATE

我需要通过STATUS首先要做的一组,然后NEW_STATUS。请注意,这些数组将是动态的。

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

您可以使用下划线? –

+0

我不能使用下划线 – mihai6744

回答

2

一种方式是到滤镜阵列:

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

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

你的答案帮助我开始。 – mihai6744

0

这是我会做:

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"]; 
相关问题