簡體   English   中英

從對象中提取每個屬性的1個

[英]Extract 1 of each property from object

我正在尋找一種使用lodash / underscore的方法(或者如果不存在,則使用純JS),這種方法只會讓我采用如下所示的給定對象。

animals: {
  {
    type: 'duck',
    name: 'quack',
  },
  {
    type: 'duck',
    name: 'quieck',
  },
  {
    type: 'dog',
    name: 'bark',
  },
},

例如,此對象包含3種不同的動物,但其中兩種是同一類型。

最終結果是能夠使用諸如for循環之類的控制結構來遍歷每種類型的動物,從而使我使用的每種類型只有一個實例的東西。

因為我正在創建列表,所以正在使用它。

此列表將類似於以下內容

duck
 name is quack
 name is quick
dog
 name is bark

但是我想使用控制結構來實現此目的,而不是簡單地在每個名稱中進行輸出和硬編碼,因為此列表將變得非常廣泛和冗長。

我會使用uniq函數。

var uniqueAnimals = _.uniq(animals, function(item, key, type) { 
    return item.type;
});

假定animals不是語法錯誤,而是數組:如果您不僅要過濾唯一類型,而且還想為輸出創建結構,則可以使用一個對象:

var kv = {};
animals.forEach(function(a) {
    if(kv[a.type]) {
        kv[a.type].push(a.name);
    } else {
        kv[a.type] = [];
    } 
}

稍后,您可以迭代Object.keys(kv)以打印鍵/值

_.groupBy()

 var animals = [ { type: 'duck', name: 'quack', }, { type: 'duck', name: 'quieck', }, { type: 'dog', name: 'bark', }, ]; var grouped = _.groupBy(animals, 'type'); document.write('<pre>' + JSON.stringify(grouped, null, 3) + '</pre>'); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM