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

Extract 1 of each property from object

本文关键字:属性 对象 提取      更新时间:2023-09-26

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