从对象中提取每个属性的一个

问题描述:

我正在寻找一个使用lodash /下划线(或普通的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 

但我想用控制结构来做到这一点,而不是通过简单的输出,并在每个名称硬编码,因为这个名单会得到非常广泛和长久。

+0

不应'animals'实际上是一个数组,而不是一个对象? –

+0

Annimal是一个'Array'还是一个'object'? – cl3m

+0

这是真的,但我的问题仍然适用于这种情况,我试图从所有对象中提取每个类型的1个实例。对于混淆感到抱歉 –

我会使用uniq函数。

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

这正是我所期待的。 –

。假定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>