2017-02-03 27 views
1

我想過濾包含對象的object以僅獲取包含具有特定值的數組的對象。對象的Array_map?

這是對象:

Object 
-Object[0] 
--Title 
--Date 
--Specs [Array] 
---- [0] Name: "Power" 
---- [0] Value: 5 
---- [1] Name: "Weight" 
---- [1] Value: 100 
-Object[1] 
--Title 
--Date 
--Specs [Array] 
---- [0] Name: "Height" 
---- [0] Value: 100 
---- [1] Name: "Weight" 
---- [1] Value: 100 

因此,我想,只有包含對象,其中specs - 陣列包含與Name「電源」的條目的對象。

我試着用這樣的array_map來解決這個問題:

  return this.items.map((obj) => { 
      let valObj = obj.specs.filter(function (elem) { 
       if (elem.Name == "Power") return elem.Value; 
      }); 
      if (valObj.length > 0) { 
       return obj; 
      } 
     }); 

但不幸的是array_map只對數組的作品,正如其名字已經告訴;-)

所以:有沒有解決的好辦法這個問題?

更新:

創建一個工作代碼,但也許不是真正的優雅;-)

itemsWithPower: function() { 
       var items = items; 
       var list = []; 

       var result = Object.keys(items).map(function(key) { 
        return items[key].Specs.filter(function(elem) { 
         if (elem.Name === "Power") list.push(items[key]); 
        }); 
       });    
       console.log(list); 
      } 

回答

0

Array.map超過對象不重複,你就必須先得到一個數組,例如對象鍵,像

var items = this.items; 
var result = Object.keys(items).map(function(key) { 
    return items[key].filter(function(obj) { 
     return obj.Specs.Name === "Power"; 
    }); 
}); 
+0

嗨,剛纔試了一下,回來'類型錯誤:不確定是不是(評估「鍵」)' – SPQRInc

+0

@SPQRInc的對象 - 那麼你沒有你已經什麼SH擁有我們?可能'this.items [key]'是一個數組,我編輯了答案 – adeneo

+0

Hi @ adeneo,'this.items'是一個包含其他對象的對象。每個對象都包含一些信息(標題,ID和'specs'數組)。我剛剛從'console.log(this.items)'創建了一個截圖:http://imgur.com/a/NCr1y 我希望這有助於嗎? – SPQRInc