Нужен ли сейчас underscrore?

313
23 января 2017, 21:10

Какие возможности underscore вы используете? Например, в нём есть функция each. Зачем она нужна, если теперь есть forEach, map в обычном js? Я так понимаю эта библиотека была актуальна когда не было ES5?

Answer 1

Нет не нужен, можно родными средствами языка делать. Интерес к библиотекм постепенно снижается. Вот динамика запросов из гугла:

Сравните сами:

Массивы

_.concat

// Underscore/Lodash
var array = [1]
var other = _.concat(array, 2, [3], [
  [4]
])
console.log(other)
  // результат: [1, 2, 3, [4]]
// Native
var array = [1]
var other = array.concat(2, [3], [
  [4]
])
console.log(other)
  // результат: [1, 2, 3, [4]]

_.fill

// Underscore/Lodash
var array = [1, 2, 3]
_.fill(array, 'a')
console.log(array)
  // результат: ['a', 'a', 'a']
_.fill(Array(3), 2)
  // результат: [2, 2, 2]
_.fill([4, 6, 8, 10], '*', 1, 3)
  // результат: [4, '*', '*', 10]
// Native
var array = [1, 2, 3]
array.fill('a')
console.log(array)
  // результат: ['a', 'a', 'a']
Array(3).fill(2)
  // результат: [2, 2, 2]
[4, 6, 8, 10].fill('*', 1, 3)
  // результат: [4, '*', '*', 10]

_.find

// Underscore/Lodash
var users = [{
  'user': 'barney',
  'age': 36,
  'active': true
}, {
  'user': 'fred',
  'age': 40,
  'active': false
}, {
  'user': 'pebbles',
  'age': 1,
  'active': true
}]
_.find(users, function(o) {
    return o.age < 40;
  })
  // результат: object for 'barney'
// Native
var users = [{
  'user': 'barney',
  'age': 36,
  'active': true
}, {
  'user': 'fred',
  'age': 40,
  'active': false
}, {
  'user': 'pebbles',
  'age': 1,
  'active': true
}]
users.find(function(o) {
    return o.age < 40;
  })
  // результат: object for 'barney'

_.findIndex

// Underscore/Lodash
var users = [{
  'user': 'barney',
  'age': 36,
  'active': true
}, {
  'user': 'fred',
  'age': 40,
  'active': false
}, {
  'user': 'pebbles',
  'age': 1,
  'active': true
}]
var index = _.findIndex(users, function(o) {
  return o.age >= 40;
})
console.log(index)
  // результат: 1
// Native
var users = [{
  'user': 'barney',
  'age': 36,
  'active': true
}, {
  'user': 'fred',
  'age': 40,
  'active': false
}, {
  'user': 'pebbles',
  'age': 1,
  'active': true
}]
var index = users.findIndex(function(o) {
  return o.age >= 40;
})
console.log(index)
  // результат: 1

_.indexOf

// Underscore/Lodash
var array = [2, 9, 9]
var result = _.indexOf(array, 2)
console.log(result)
  // результат: 0
// Native
var array = [2, 9, 9]
var result = array.indexOf(2)
console.log(result)
  // результат: 0

_.join

// Lodash
var result = _.join(['one', 'two', 'three'], '--')
console.log(result)
  // результат: 'one--two--three'
// Native
var result = ['one', 'two', 'three'].join('--')
console.log(result)
  // результат: 'one--two--three'

_.lastIndexOf

// Underscore/Lodash
var array = [2, 9, 9, 4, 3, 6]
var result = _.lastIndexOf(array, 9)
console.log(result)
  // результат: 2
// Native
var array = [2, 9, 9, 4, 3, 6]
var result = array.lastIndexOf(9)
console.log(result)
  // результат: 2

_.reverse

// Lodash
var array = [1, 2, 3]
console.log(_.reverse(array))
  // результат: [3, 2, 1]
// Native
var array = [1, 2, 3]
console.log(array.reverse())
  // результат: [3, 2, 1]

Коллекции

_.each

// Underscore/Lodash
_.each([1, 2, 3], function(value, index) {
    console.log(value)
  })
  // результат: 1 2 3
// Native
[1, 2, 3].forEach(function(value, index) {
    console.log(value)
  })
  // результат: 1 2 3

_.every

// Underscore/Lodash
function isLargerThanTen(element, index, array) {
  return element >= 10
}
var array = [10, 20, 30]
var result = _.every(array, isLargerThanTen)
console.log(result)
  // результат: true
// Native
function isLargerThanTen(element, index, array) {
  return element >= 10
}
var array = [10, 20, 30]
var result = array.every(isLargerThanTen)
console.log(result)
  // результат: true

_.filter

// Underscore/Lodash
function isBigEnough(value) {
  return value >= 10
}
var array = [12, 5, 8, 130, 44]
var filtered = _.filter(array, isBigEnough)
console.log(filtered)
  // результат: [12, 130, 44]
// Native
function isBigEnough(value) {
  return value >= 10
}
var array = [12, 5, 8, 130, 44]
var filtered = array.filter(isBigEnough)
console.log(filtered)
  // результат: [12, 130, 44]

_.includes

var array = [1, 2, 3]
  // Underscore/Lodash - also called with _.contains
_.includes(array, 1)
  // результат: true
// Native
var array = [1, 2, 3]
array.includes(1)
  // результат: true
// Native (only works with flat array values, no complex objects)
var array = [1, 2, 3]
array.indexOf(1) > -1
  // результат: true

_.map

// Underscore/Lodash
var array1 = [1, 2, 3]
var array2 = _.map(array1, function(value, index) {
  return value * 2
})
console.log(array2)
  // результат: [2, 4, 6]
// Native
var array1 = [1, 2, 3]
var array2 = array1.map(function(value, index) {
  return value * 2
})
console.log(array2)
  // результат: [2, 4, 6]

_.pluck

// Underscore/Lodash
var array1 = [{
  name: "Alice"
}, {
  name: "Bob"
}, {
  name: "Jeremy"
}]
var names = _.pluck(array1, "name")
console.log(names)
  // результат: ["Alice", "Bob", "Jeremy"]
// Native
var array1 = [{
  name: "Alice"
}, {
  name: "Bob"
}, {
  name: "Jeremy"
}]
var names = array1.map(function(x) {
  return x.name
})
console.log(names)
  // результат: ["Alice", "Bob", "Jeremy"]

_.reduce

// Underscore/Lodash
var array = [0, 1, 2, 3, 4]
var result = _.reduce(array, function(previousValue, currentValue, currentIndex, array) {
  return previousValue + currentValue
})
console.log(result)
  // результат: 10
// Native
var array = [0, 1, 2, 3, 4]
var result = array.reduce(function(previousValue, currentValue, currentIndex, array) {
  return previousValue + currentValue
})
console.log(result)
  // результат: 10

_.reduceRight

// Underscore/Lodash
var array = [0, 1, 2, 3, 4]
var result = _.reduceRight(array, function(previousValue, currentValue, currentIndex, array) {
  return previousValue - currentValue
})
console.log(result)
  // результат: -2
// Native
var array = [0, 1, 2, 3, 4]
var result = array.reduceRight(function(previousValue, currentValue, currentIndex, array) {
  return previousValue - currentValue
})
console.log(result)
  // результат: -2

_.size

// Underscore/Lodash
var result = _.size({
  one: 1,
  two: 2,
  three: 3
})
console.log(result)
  // результат: 3
// Native
var result2 = Object.keys({
  one: 1,
  two: 2,
  three: 3
}).length
console.log(result2)
  // результат: 3

_.some

// Underscore/Lodash
function isLargerThanTen(element, index, array) {
  return element >= 10
}
var array = [10, 9, 8]
var result = _.some(array, isLargerThanTen)
console.log(result)
  // результат: true
// Native
function isLargerThanTen(element, index, array) {
  return element >= 10
}
var array = [10, 9, 8]
var result = array.some(isLargerThanTen)
console.log(result)
  // результат: true

Функции

_.after

var notes = ['profile', 'settings']
  // Underscore/Lodash
var renderNotes = _.after(notes.length, render)
notes.forEach(function(note) {
  console.log(note)
  renderNotes()
})
// Native
notes.forEach(function(note, index) {
  console.log(note)
  if (notes.length === (index + 1)) {
    render()
  }
})

Язык

_.isNaN

// Underscore/Lodash
console.log(_.isNaN(NaN))
  // результат: true
// Native
console.log(isNaN(NaN))
  // результат: true
// ES6
console.log(Number.isNaN(NaN))
  // результат: true

Объект

_.assign

// Underscore: _.extendOwn
// Lodash
function Foo() {
  this.c = 3;
}
function Bar() {
  this.e = 5;
}
Foo.prototype.d = 4;
Bar.prototype.f = 6;
var result = _.assign(new Foo, new Bar);
console.log(result);
// результат: { 'c': 3, 'e': 5 }
// Native
function Foo() {
  this.c = 3;
}
function Bar() {
  this.e = 5;
}
Foo.prototype.d = 4;
Bar.prototype.f = 6;
var result = Object.assign(new Foo, new Bar);
console.log(result);
// результат: { 'c': 3, 'e': 5 }

_.keys

// Underscore/Lodash
var result = _.keys({
  one: 1,
  two: 2,
  three: 3
})
console.log(result)
  // результат: ["one", "two", "three"]
// Native
var result2 = Object.keys({
  one: 1,
  two: 2,
  three: 3
})
console.log(result2)
  // результат: ["one", "two", "three"]

Строка

_.repeat

// Lodash
var result = _.repeat('abc', 2)
  // результат: 'abcabc'
// Native
var result = 'abc'.repeat(2)
console.log(result)
  // результат: 'abcabc'

_.toLower

// Lodash
var result = _.toLower('FOOBAR')
console.log(result)
  // результат: 'foobar'
// Native
var result = 'FOOBAR'.toLowerCase()
console.log(result)
  // результат: 'foobar'

_.toUpper

// Lodash
var result = _.toUpper('foobar')
console.log(result)
  // результат: 'FOOBAR'
// Native
var result = 'foobar'.toUpperCase()
console.log(result)
  // результат: 'FOOBAR'

_.trim

// Lodash
var result = _.trim(' abc ')
console.log(result)
  // результат: 'abc'
// Native
var result = ' abc '.trim()
console.log(result)
  // результат: 'abc'

Ссылки

  • Оригинал
  • Mozilla Developer Network
  • Underscore.js
  • Lodash.js
  • You - Dont - Need - jQuery
READ ALSO
как отключить скролинг страницы, а на это событие поставить чтобы появлялся текст

как отключить скролинг страницы, а на это событие поставить чтобы появлялся текст

дойдя до определенного места на страницы нужно отключить scroll страницы(вниз), и в это время на прокрутку поставить событие чтобы появлялся...

369
Переадресация писем на node.js

Переадресация писем на node.js

Требуется сделать простой редирект писем на nodejs

299
Не работает Атрибут hashtags:twitter в yandex share

Не работает Атрибут hashtags:twitter в yandex share

Здравствуйте, уважаемые пользователи Stackoverflowcom

274