提示:在继续阅读之前,请注意此文章最后更新于 1979 天前,其中的部分内容可能已经无效或过时。

数组

001 数组去重合并

例子1摘自MDN的Array.from()
文档:

function combine() {
  let arr = [].concat.apply([], arguments); // 没有去重复的新数组
  return Array.from(new Set(arr));
}
let m = [1, 2, 2, 'a', 'b'], n = [2, 3, 3, 'a'];
console.log(combine(m, n));  // [ 1, 2, 'a', 'b', 3 ]

关键点在于使用apply可以在不创建新数组的情况下将arguments合入[]和使用Set去重。Set对象允许你存储任何类型的唯一值。然后用Array.from()将其转化为数组元素。
参见:Function.prototype.apply()
Set

002 比较权重

function getItems(goal) {
  let arrItems = Array.from(goal).sort(compare('weight'));
  return arrItems;
}

function compare(property) {
  return function (a, b) {
    return a[property] - b[property];
  }
}

getItems([{ a: 4, weight: 4 }, { b: 2, weight: 2 }, { c: 3, weight: 3 }]);
// result:[{ b: 2, weight: 2 }, { c: 3, weight: 3 }, { a: 4, weight: 4 }]

003 Camel-Case

第一种是从从commander.js偷来的

function camelcase(flag) {
  return flag.split('-').reduce((str, word) => {
    return str + word[0].toUpperCase() + word.slice(1);
  });
}

其实这个准确的来说应该是Pascal(大驼峰法) 但是commander.js的对象program使用的都是小驼峰法(以下简称驼峰法),这么看来是我还没偷对。
而在lodash中的camelCase则是这么写的:

const camelCase = (string) => (
  words(toString(string).replace(/['\u2019]/g, '')).reduce((result, word, index) => {
    word = word.toLowerCase()
    return result + (index ? upperFirst(word) : word)
  }, '')
)

这边用到了一个叫words的函数,比较复杂,下次在写吧