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

时间:2016-03-08 17:24:55

标签: javascript node.js ecmascript-6

我正在寻找一种方法,使用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

但我想用控制结构来做这件事,而不是简单地在每个名字中输出和硬编码,因为这个列表会变得非常广泛和冗长。

3 个答案:

答案 0 :(得分:1)

我会使用uniq函数。

    $('#sel2').change(function(e) {
        $("#Group").html($('#Group').sort(function(x, y) {
            return $(x).val() == $("#sel2").val() ? 1 : -1;
        }));
        $("#Group").get(0).selectedIndex = 0;
        e.preventDefault();
    });

答案 1 :(得分: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)来打印您的键/值

答案 2 :(得分:0)

ServiceWorkerRegistration.update也许?



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>');
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.min.js"></script>
&#13;
&#13;
&#13;