Underscore.js _.indexBy函数

  • Post category:jquery

Underscore.js是一个非常流行的JavaScript工具库,提供了许多有用的函数和方法,其中包括_.indexBy函数。

什么是_.indexBy函数

_.indexBy函数是Underscore.js中的一个集合函数,用于将一个集合转化为一个对象。在转化过程中,需要指定一个键值(即数组或对象中的属性),该键值的值也会成为新创建的对象的属性。

_.indexBy函数的使用方法

_.indexBy函数可以被调用于数组或对象。它使用一个迭代函数来定义新对象的属性键。函数接受三个参数:

  1. 集合 – 数组或对象。
  2. 迭代函数 – 每次迭代中要执行的函数,用来决定新对象的属性键。
  3. 上下文(可选)- 迭代函数中this的指向。

下面是函数的基本语法:

_.indexBy(list, iteratee, [context])

_.indexBy函数的示例

下面是一个数组作为集合的示例,使用_.indexBy函数将数组转化为对象:

var drinks = [
     {name: "coffee", flavor: "bitter"},
     {name: "tea", flavor: "subtle"},
     {name: "lemonade", flavor: "sour"}
];

var drinksByName = _.indexBy(drinks, "name");

console.log(drinksByName);

输出:

{ coffee: { name: 'coffee', flavor: 'bitter' },
  tea: { name: 'tea', flavor: 'subtle' },
  lemonade: { name: 'lemonade', flavor: 'sour' } }

在上面的示例中,我们将数组drinks转成了一个对象drinksByName。在转化的过程中,我们使用了”name“作为新对象的属性键。如此一来,原数组中的每个元素都成了新对象的一个属性,属性名分别为“coffee”,“tea”,“lemonade”,属性值为每个元素所对应的对象。

下面是一个对象作为集合的示例,使用迭代函数将对象转化为对象:

var candies = {
  "112233": { name: "Skittles", flavor: "fruit" },
  "90210": { name: "Nerds", flavor: "tart" },
  "456321": { name: "Jelly Beans", flavor: "sweet" }
};

var candiesByCode = _.indexBy(candies, function(candy) {
  return candy.name.toLowerCase();
});

console.log(candiesByCode);

输出:

{ skittles: { name: 'Skittles', flavor: 'fruit' },
  nerds: { name: 'Nerds', flavor: 'tart' },
  'jelly beans': { name: 'Jelly Beans', flavor: 'sweet' } }

在这个示例中,我们将对象candies转成了一个对象candiesByCode。迭代函数中使用candy.name.toLowerCase()作为新对象的属性键。新对象中的每个属性名都被转成了小写形式,属性值为对应的元素。

总的来说,Underscore.js的_.indexBy函数是一个非常实用而易于使用的函数,可以让开发者非常方便地将一个集合转化为一个对象,在实践中应用非常广泛。