返回

lodash的toLength和toPairs方法实现和扩展

前端

前言

本篇章我们将认识lodash里的toLength方法和toPairs方法实现,同时在实现toPairs的过程中学习到_.zipObject的扩展功能。

toLength

toLength方法用于创建一个指定长度的数组。如果提供的长度小于或等于0,则返回一个空数组。如果提供的长度大于数组的长度,则使用undefined填充数组。

const array = [1, 2, 3];

console.log(toLength(array, 5));
// => [1, 2, 3, undefined, undefined]

console.log(toLength(array, 0));
// => []

toLength方法的实现非常简单,如下:

function toLength(array, length) {
  if (length <= 0) {
    return [];
  }

  const result = new Array(length);
  for (let i = 0; i < array.length; i++) {
    result[i] = array[i];
  }

  return result;
}

toPairs

toPairs方法用于将对象转换为一个由键值对组成的数组。

const object = { a: 1, b: 2, c: 3 };

console.log(toPairs(object));
// => [['a', 1], ['b', 2], ['c', 3]]

toPairs方法的实现如下:

function toPairs(object) {
  const result = [];
  for (const key in object) {
    if (object.hasOwnProperty(key)) {
      result.push([key, object[key]]);
    }
  }

  return result;
}

在实现toPairs的过程中,我们学习到了_.zipObject的扩展功能。_.zipObject方法用于将一个由键值对组成的数组转换为一个对象。

const array = [['a', 1], ['b', 2], ['c', 3]];

console.log(_.zipObject(array));
// => { a: 1, b: 2, c: 3 }

扩展

我们可以扩展toPairs方法,使其能够将对象转换为一个由键值对组成的数组,并指定键的顺序。

function toPairsWithOrder(object, keys) {
  const result = [];
  for (const key of keys) {
    if (object.hasOwnProperty(key)) {
      result.push([key, object[key]]);
    }
  }

  return result;
}

const object = { a: 1, b: 2, c: 3 };

console.log(toPairsWithOrder(object, ['b', 'c', 'a']));
// => [['b', 2], ['c', 3], ['a', 1]]

结语

toLength和toPairs方法都是非常有用的lodash方法。toLength方法可以用于创建一个指定长度的数组,而toPairs方法可以用于将对象转换为一个由键值对组成的数组。通过扩展toPairs方法,我们还可以使其能够指定键的顺序。