2015-10-05 125 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"]; 
相關問題