const { parse } = require('date-fns');
const { ru } = require('date-fns/locale');
const parsedDate = parse('16 октября 2020', 'dd MMMM yyyy', new Date(), {
locale: ru,
});
console.log(new Date(parsedDate).toLocaleString()); // 2020-10-16 0:00:00
require
Вам необходимо заменить будет. Для браузера например так (если собираете скрипты) import { parse } from 'date-fns';
import { ru } from 'date-fns/locale';
function some(url) {
return fetch(url)
.then(response => response.json())
}
some(url).then(data => console.log(data));
async function some(url) {
const response = await fetch(url);
const data = await response.json();
return data;
}
(async function () {
const data = await some(url);
console.log(data);
})();
const createSequence = numbers => {
const store = numbers.reduce((accumulator, number) => {
accumulator.intermediateValue += number;
accumulator.sequence.push(accumulator.intermediateValue);
return accumulator;
}, {
sequence: [],
intermediateValue: 0
});
return store.sequence;
};
$(document).ready(function () {
$('#input-quantity').on('input', function () {
$('.duble').text($(this).val());
});
});
const quantityInput = document.querySelector('#input-quantity');
const quantityOutput = document.querySelector('.duble');
quantityInput.addEventListener('input', () => {
quantityOutput.textContent = quantityInput.value;
});
/**
* @param {object} schema
* @param {number} schema.id
* @param {string} schema.name
* @param {number} schema.age
* @param {string} schema.gender
*/
/**
* @typedef UserSchema
* @type {object}
* @property {number|undefined} id
* @property {string|undefined} name
* @property {number|undefined} age
* @property {string|undefined} gender
*/
/** @type {UserSchema} */
const defaultSchema = {
id: undefined,
name: undefined,
age: undefined,
gender: undefined
};
/**
* @param {Object<string, any>} schema
* @returns {UserSchema}
*/
function userSchema(schema = {}) {
return Object.assign({ ...defaultSchema }, schema);
}
const createKeyGenerator = (groupSize, groupCount) => {
const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const length = groupSize * groupCount;
return () => {
const values = new Uint32Array(length);
crypto.getRandomValues(values);
const chars = [...values].map(value => dictionary[value % dictionary.length]);
const key = new Array(groupCount)
.fill(null)
.map((_, index) => {
const offset = index * groupSize;
return chars
.slice(offset, offset + groupSize)
.join('');
})
.join('-');
return key;
};
};
const createKey = createKeyGenerator(4, 3);
console.log(createKey()); // FO4V-P2ZV-JYH4
console.log(createKey()); // TTMR-EBVC-8TUW
const createKeyGenerator = (groupSize, groupCount) => {
const dictionary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const length = groupSize * groupCount;
const group = new RegExp(`.{${groupSize}}`, 'g');
return () => {
const values = new Uint32Array(length);
crypto.getRandomValues(values);
const chars = [...values].map(value => dictionary[value % dictionary.length]);
const key = '_'
.repeat(length)
.replace(/\w/g, (match, index) => chars[index])
.match(group)
.join('-');
return key;
};
};
Set
коллекции, по итогу размер коллекции превысил (16^6
значений) и получил исключение. При этом не было ни одного повтора. progValue
надо бы сохранять и уже его использовать в выводе и сравнениях. function* iterateArray(array) {
for (const entry of array) {
yield entry;
}
}
const numbers = [2, 4, 6, 8, 10];
const iterator = iterateArray(numbers);
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 6, done: false }
// Дополнение
const adapter = iterator => () => {
const entry = iterator.next();
return entry.value;
};
const next = adapter(iterator);
console.log(next()); // 2
console.log(next()); // 4
console.log(next()); // 6
const iterator = array => {
let index = 0;
return () => {
const value = array[index];
if (index < array.length) {
index++;
}
return value;
};
}
const numbers = [2, 4, 6, 8, 10];
const next = iterator(numbers);
console.log(next()); // 2
console.log(next()); // 4
console.log(next()); // 6
undefined
как обозначение об окончании массива. Следовательно, во втором варианте можно проверять на undefined
и если получаем true
, значит проитерировали весь массив. Но что если undefined
будет значением массива? В этом случае генераторы всю работу делают за нас, т. к. дополнительно отдают флаг, который говорит о завершении. Конечно, можно в варианте без генератора также симулировать данное поведение, возвращая следующую структуру:{
value,
done: array.length === index
}
let links = document.querySelectorAll('.m-menu-link');
link.forEach(link => link.addEventListener(...));
// или
for (const link of links) {
link.addEventListener(...);
}