@JSlang

Страница 179 из 2237
Котяй Негодяй
10.09.2016
09:37:10
Оно генерируется или получается. Заранее известна только его длина.

О боже.

Забей.

Дмитрий
10.09.2016
09:38:00
Ну вот как получается тогда мап и делаешь. reduce опять же. В общем, у тебя очень странная задача. Тогда заполнение пустыми элементами, что уж

Google
Котяй Негодяй
10.09.2016
09:38:35
Задача очень тривиальная.

Дмитрий
10.09.2016
09:38:47
Да)

Котяй Негодяй
10.09.2016
09:41:59
Допустим, тебе нужно сгенерировать массив объектов. У объектов должны быть свойства, которые рассчитываются на основе индекса родителя в массиве. Писать const items = [1, 2, 3, ...].map( ... ); не вариант, т.к. объектов может быть 100... 1000... Не-не, это уж слишком. Соответственно, тебе нужно сгенерировать последовательность.

Поэтому let usedItems = [1,2,3] здесь не катит.

Редъюз тоже.

Ну, хотя, написать специальный редъюсер — тоже красиво. Но бессмысленно.

Дмитрий
10.09.2016
09:46:15
function _map(fn, functor) { var idx = 0; var len = functor.length; var result = Array(len); while (idx < len) { result[idx] = fn(functor[idx]); idx += 1; } return result; } Это map из ramda, фактически твой случай, только уже написанный, ещё и максимально упрощённо. Уже с тестами, документацией и прочим. Поэтому я не парюсь по такой фигне а просто пишу const mapper = R.map(anyFunc) let newArray = mapper(anyArray) Незачем изобретать велосипед))

Можешь использовать его, тащемта

Котяй Негодяй
10.09.2016
09:48:18
Эммм... Очень сомневаюсь, что мне нужно подключать либу ради решения такой задачи. Я понимаю, если она сократит мой код на стопиццот строк, но она в данном случае сокращает всего лишь длину одной строки моего кода.

Дмитрий
10.09.2016
09:49:09
Такие вещи не длину сокращают, а время)

Котяй Негодяй
10.09.2016
09:49:28
Ну и велосипеда здесь нет. И времени я не затрачиваю больше.

Дмитрий
10.09.2016
09:49:43
Ты уже пол часа размышляешь))

Котяй Негодяй
10.09.2016
09:49:49
Я же не пишу никаких новых конструкций.

Google
Котяй Негодяй
10.09.2016
09:50:34
Ты думаешь, что подключаемые библиотеки существуют, чтобы избавить от необходимости думать? =) Нет. Это не так.

Дмитрий
10.09.2016
09:51:29
А для чего же ?

И тем не менее, почему тебя не устраивает _map = func=>e=>e.map(func) "Это уж слишком" — не ответ, родной map хотя бы движком соптимизируется

const mapper = _map((e,i)=>e+i) let newArray = mapper(anyArray)

Дмитрий
10.09.2016
09:53:26
Где то внутри V8, я хз где, пусть оно сам делается

Котяй Негодяй
10.09.2016
09:54:04
Ты в корне не понял задачу.

Задача — не обойти массив, а сгенерировать.

Дмитрий
10.09.2016
09:57:04
У объектов должны быть свойства, которые рассчитываются на основе индекса родителя в массиве У тебя есть индекс родителя и функция-генератор (e,i)=>{}, это всё, что нужно для генерации нового массив

Задача — не обойти массив, а сгенерировать.
Это одно и то же. map возвращает новый массив, как бы, не?

const items = new Array(count).fill(null) .map(index => blaBlaBla(index));

Дмитрий
10.09.2016
10:10:26
Ага, и где взять индекс родителя до создания самого родителя?
Ну это не map тогда, выглядит странно. Да и создавать новый массив, потом проход по индексам, потом результат в новый массив — это хуже, чем просто while/for второго варианта

Дмитрий
10.09.2016
10:15:15
А с точки зрения логики - у меня вот fatal error случился от маппинга ничего в массив %) Map это преобразование, к созданию его прикручивать противоестественно

Котяй Негодяй
10.09.2016
10:18:40
о.0

Какой код ты выполнил? =)

Дмитрий
10.09.2016
10:23:36
Ну мне оказалось достаточно просто прокрутить в голове))

Котяй Негодяй
10.09.2016
10:24:12
Ну, прокрутить в голове что? =)

マイク
10.09.2016
10:27:23
Процент ложных срабатываний ниже
Какие юзер-агенты брал? Откуда база? Я слабо верю, что в одно лицо можно сделать что-либо лучше, чем пхпшный mobile detect.

Google
Дмитрий
10.09.2016
10:28:34
Ну, прокрутить в голове что? =)
new Array(count).fill(null).map(...) Создаём массив ничего -> массив не трогаем, просто создаём индексы-> создаём нормальный массив Ну вот где-то здесь я завис)) Смысл теперь ясен, но я бы так всё равно не писал, сто процентов %)

Котяй Негодяй
10.09.2016
10:29:11
Никаких ошибок — всё работает. =)

http://codepen.io/bigslycat/pen/vXNJmV?editors=0012

Ches
10.09.2016
11:06:10
в чем разница если определить метод в функции конструкторе или после через prototype?

Mikhail
10.09.2016
11:22:54
const items = new Array(count).fill(null) .map(index => blaBlaBla(index));
Лодэш некошерно использовать?

Там есть .times() если уж for писать слишком сложно

Котяй Негодяй
10.09.2016
11:26:24
В prototype метод создаётся 1 раз, а в конструкторе — каждый раз при вызове конструктора.

Mikhail
10.09.2016
11:28:48
ну там давно уже есть partial import

Mikhail
10.09.2016
11:29:02
import _times from 'lodash/times'

Котяй Негодяй
10.09.2016
11:32:03
Хм... Аргумент.

Спасибо.

class Times { constructor(callback) { this.callback = callback; } repeat(count) { return new Array(count).fill(null).map( (value, index) => this.callback(index) ); } }

Котяй Негодяй
10.09.2016
13:07:09
Ой, пардон. У меня тоже так было.

Используй Array.from(Array(n))
Похоже, Array.from(new Array(count)) ничем принципиально не отличается от: new Array(count).fill(undefined).

Google
Name
10.09.2016
13:18:42
class Times { constructor(callback) { this.callback = callback; } repeat(count) { return new Array(count).fill(null).map( (value, index) => this.callback(index) ); } }
о ужас не хватает только названий пары паттернов в конструкторе и обёртывания этого всего в реакт компонент

Name
10.09.2016
13:23:54
Я не понимаю, зачем нужен этот класс.

Похоже, Array.from(new Array(count)) ничем принципиально не отличается от: new Array(count).fill(undefined).
А какое тебе требуется принципиальное отличие? Этот способ всё ещё делает не то, что надо?

Котяй Негодяй
10.09.2016
13:36:14
Name
10.09.2016
13:37:22
Это от того, что я не парю и ем мясо

Котяй Негодяй
10.09.2016
13:37:37
Я не понимаю, зачем нужен этот класс.
Класс создан как аналогия _.times().

Name
10.09.2016
13:38:07
Но зачем в данном случае нужна абстракция в виде класса?

Admin
ERROR: S client not available

Котяй Негодяй
10.09.2016
13:39:19
Но зачем в данном случае нужна абстракция в виде класса?
Для удобства и краткости. А класс — затем, чтобы потом вызывать repeat() как мне вздумается.

Name
10.09.2016
13:45:01
можно вынести это в npm модуль с названием из одной буквы, будет ещё короче а в качестве заполняемых значений нового массива передавать не значение или функцию, а класс, так будет ещё удобнее

Котяй Негодяй
10.09.2016
13:55:39
А можно ещё выпить валерьянки.

Дмитрий
10.09.2016
13:56:46
Для удобства и краткости. А класс — затем, чтобы потом вызывать repeat() как мне вздумается.
function fillWith(fn){ return function(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = fn(idx) idx += 1 } return result } } Так тоже можно вызывать когда угодно, но без лишних классов. Быстрее этого варианта вряд ли получится

Котяй Негодяй
10.09.2016
14:02:55
function fillWith(fn){ return function(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = fn(idx) idx += 1 } return result } } Так тоже можно вызывать когда угодно, но без лишних классов. Быстрее этого варианта вряд ли получится
Пардон. Здесь при каждом срабатывании fillWith() создаётся функция. Если её засунуть в прототип, то будет быстрее. Ну и fillWith() делает почти то же самое, что и класс, с одним отличием, что конструктор класса возвращает объект с одним свойством, а данная функция — другую функцию. Но в случае с классом функция, которая вызывает колбэк, создаётся единожды (при объявлении класса).

То есть fillWith() — это, по-сути, велик. Только более медленный.

Проще тогда просто писать function fillWith(callback, count) { ... }

Дмитрий
10.09.2016
14:07:46
То есть fillWith() — это, по-сути, велик. Только более медленный.
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае

Это просто пример к "вызывать repeat() как мне вздумается"

Котяй Негодяй
10.09.2016
14:10:29
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае
Если написать твою fillWith() так же, но в виде класса, тио будет быстрее. Я не говорил, что конкретно моя реализация быстрее (она, в общем-то, на это и не претендует). Я говорил о том, что ты повёл себя непоследовательно — хотел оптимизировать, но допустил ошибку — твой код каждый раз будет делать работу, которую можно было сделать один раз.

Google
Котяй Негодяй
10.09.2016
14:14:06
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае
То есть, еслит переписать твой пример в виде класса, то он будет работать быстрее: class Times { constructor(callback) { this.callback = callback; } repeat(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = this.callback(idx) idx += 1 } return result } }

Здесь repeat() создаётся только при объявлении класса. При создании его экземпляра, на repeat() создаётся ссылка в прототипе экземпляра.

В твоём примере анонимная функция создаётся столько раз, сколько ты вызываешь fillWith().

Дмитрий
10.09.2016
14:26:03
>так же, но в виде класса, тио будет быстрее Хахах, увы, но нет)

Котяй Негодяй
10.09.2016
14:42:52
Ну ладно.

Котяй Негодяй
10.09.2016
15:09:01
Babel полифилит fill?
Не знаю, что делает пакет babel-polyfill. Я использую babel только для синтаксиса. А для клиентских полифилов использую https://polyfill.io

Damir
10.09.2016
15:14:12
Не знаю, что делает пакет babel-polyfill. Я использую babel только для синтаксиса. А для клиентских полифилов использую https://polyfill.io
Хорошая библиотека, но полифилит ли она с оглядкой на Babel? Некоторые функции Babel полифилит сам

Котяй Негодяй
10.09.2016
15:14:56
Хорошая библиотека, но полифилит ли она с оглядкой на Babel? Некоторые функции Babel полифилит сам
Ну, посмотри код. Мне кажется, любой полифил должен проверять наличие.

А какие функции бабел полифилит при presets: ['es2015', 'es2016', 'react']?

Damir
10.09.2016
15:19:20
Ну, посмотри код. Мне кажется, любой полифил должен проверять наличие.
Там проверка через useragent, полифилы подгружаются все для определяемого браузера

Котяй Негодяй
10.09.2016
15:19:57
Там проверка через useragent, полифилы подгружаются все для определяемого браузера
Ну, одно дело, как они подгружаются, другое дело — как выполняются.

Damir
10.09.2016
15:20:15
А какие функции бабел полифилит при presets: ['es2015', 'es2016', 'react']?
Сходу не скажу, но у меня были траблы всего с несколькими функциями, которые Babel не полифилит

Котяй Негодяй
10.09.2016
15:21:37
Я думал, бабел только при истользовании определённого пакета полифилит. Осторожнее. Проверь своё приложение на IE8.

https://cdn.polyfill.io/v2/polyfill.js?features=all

// setImmediate (function (global, undefined) { "use strict"; if (global.setImmediate) { return; } ...

Всё нормально он полифилит. С проверкой.

Damir
10.09.2016
15:29:22
Я думал, бабел только при истользовании определённого пакета полифилит. Осторожнее. Проверь своё приложение на IE8.
Имеешь в виду Babel-polyfill? Я обычно включал его по умолчанию и долго не разбирался, что он полифилит

Тема отличная, ещё бы доступ через npm и полифилы через browserlist

Котяй Негодяй
10.09.2016
15:30:24
Дада. Его. Я не пользуюсь им, т.к. есть сервис. Лучше буду тянуть меньше кода.

Так есть же npm-пакет. Ты почитай доку-то.

Они на селф-хостинг это распространяют в том числе.

Страница 179 из 2237