从对象中提取每个属性的一个
问题描述:
我正在寻找一个使用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
但我想用控制结构来做到这一点,而不是通过简单的输出,并在每个名称硬编码,因为这个名单会得到非常广泛和长久。
答
我会使用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>
不应'animals'实际上是一个数组,而不是一个对象? –
Annimal是一个'Array'还是一个'object'? – cl3m
这是真的,但我的问题仍然适用于这种情况,我试图从所有对象中提取每个类型的1个实例。对于混淆感到抱歉 –