[英]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)
以打印键/值
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.