2017-05-21 93 views
1

我試圖去通過數據的大對象,說的形式爲:Lodash/JavaScript的 - 如何找到嵌套唯一鍵的對象

{ 
data1: { 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID1' 
    }, 
data2: { 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID2' 
    }, 
data3: { 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID1' 
    }, 
data4: { 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID2' 
    } 
} 

有沒有去通過這個對象的方法和回到我身上'id'的獨特價值?例如,我想結束與值

UniqueID1, UniqueID2, 

要麼在一個數組或對象,它沒關係。 對此的任何幫助將非常感激。謝謝。

回答

2

您可以使用普通js使用map()Object.keys()Set)來執行此操作,以返回唯一密鑰的數組。

var data = {"data1":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data2":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"},"data3":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data4":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"}} 
 

 
var uniq = [...new Set(Object.keys(data).map(e => data[e].id))] 
 
console.log(uniq)

或者與Lodash您可以使用map,然後使用uniq

var data = {"data1":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data2":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"},"data3":{"keyA":"AValue","keyB":"BValue","id":"UniqueID1"},"data4":{"keyA":"AValue","keyB":"BValue","id":"UniqueID2"}} 
 

 
var uniq = _.uniq(_.map(data, 'id')) 
 
console.log(uniq)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

+0

非常感謝,兩者都很好。 –

+0

不客氣。 –

+1

@NenadVracar你可以刪除'_.values()',它仍然可以工作 – ryeballar

1

,因爲您標記lodash你可以做這樣的爲數組

var myArray = [ 
{ 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID1' 
}, 
{ 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID2' 
}, 
{ 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID1' 
}, 
{ 
    keyA: 'AValue', 
    keyB: 'BValue', 
    id: 'UniqueID2' 
    } 
]; 

_.map(myArray, 'id'); 

here是文檔

+0

是的,謝謝,並且可以鏈接「_.values(data)」來創建數組。 –

1

可以使用做到這一點沒有lodash Array.reduce和Set

const uniques = Object.keys(data).reduce((acc,key) => acc.add(data[key].id), new Set()) 
console.log(uniques) 
相關問題