const concat = (key, ...arrs) =>
Object.values([]
.concat(...arrs)
.reduce((acc, n) => (acc[n[key]] = acc[n[key]] || n, acc), {})
);
const newFirst = concat('hour', first, hours);
function add(key, target, ...sources) {
const keys = new Set(target.map(key));
sources.forEach(arr => arr.forEach(n => {
const k = key(n);
if (!keys.has(k)) {
keys.add(k);
target.push(n);
}
}));
return target;
}
add(n => n.hour, first, hours).sort((a, b) => a.hour - b.hour);
$('#courses').hover(function() {
$('#coursesHeader').dequeue().show();
}, function() {
$('#coursesHeader').delay(1000).queue(function() {
$(this).hide().dequeue();
});
});
let timeout = null;
$('#courses').hover(function() {
clearTimeout(timeout);
$('#coursesHeader').show();
}, function() {
timeout = setTimeout(() => $('#coursesHeader').hide(), 1000);
});
$('<div class="list" />')
.append([...Array(100)].map((n, i) => `<div>Item ${i}</div>`).join(''))
.appendTo('body');
const li = $('.list').children();
let selected = $();
$(window).on('keydown', function(e) {
e.preventDefault();
const [ method, index ] = ({
ArrowUp: [ 'prev', -1 ],
ArrowDown: [ 'next', 0 ],
})[e.key] || [];
if (method) {
const next = selected.removeClass('selected')[method]();
selected = (next.length ? next : li.eq(index)).addClass('selected');
$(this).scrollTop(selected.position().top);
}
});
localStorage.setItem('time', ticks);
// если значение отсутствует, то будет установлен 0, т.к. +null === 0
var ticks = +localStorage.getItem('time');
option:selected
, суммируя data-price
и закидывая data-name
в массив:$('.select-spa').on('change', function() {
const data = $('option:selected').get().reduce((acc, n) => {
acc.names.push(n.dataset.name);
acc.price += +n.dataset.price;
return acc;
}, { names: [], price: 0 });
$('.chose').text(data.names.join(', '));
$('.to-pay .result-select').val(data.price);
});
$('.price-inp').change(function() {
const val = Math.round($(this).val() / 100) * 100;
$(this).add('.result').val(val);
});
const details = document.querySelectorAll('[name="pakdetail"]');
const colors = document.querySelectorAll('[name="pakcolor"]');
const onChange = enableColors.bind(null, true);
enableColors(false);
function enableColors(enabled) {
const method = `${enabled ? 'remove' : 'add'}EventListener`;
details.forEach(n => n[method]('change', onChange));
colors.forEach(n => n.disabled = !enabled);
}
const result = [].concat(...arr);
не могу додуматься как сделать когда берется уже не первая буква второго слова а последующие
const alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'.split('');
const arr = [ 'нора','дом','аметист','баржа','танк','каток','еж','рак','сом','морж','рога','том','сани','лимон','рыба','кот','собака','море','креветка' ];
const result = [];
getWord(alphabet);
while (arr.length) {
const lastLetter = result[result.length - 1].split('').pop();
const lastLetterIndex = alphabet.indexOf(lastLetter);
let letters = [ lastLetter ];
for (let i = 1; i < alphabet.length; i++) {
letters.push(alphabet[lastLetterIndex + i], alphabet[lastLetterIndex - i]);
}
letters = letters.filter(n => !!n);
getWord(letters);
}
console.log(arr);
console.log(result);
function getWord(letters) {
for (let i = 0; i < letters.length; i++) {
const letter = letters[i];
const index = arr.findIndex(n => n[0] === letter);
if (index !== -1) {
result.push(arr.splice(index, 1)[0]);
return;
}
}
}
val = this.value
val = this.value.toUpperCase()
if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) {
if (arr[i].toUpperCase().includes(val)) {
b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>";
b.innerHTML += arr[i].substr(val.length);
b.innerHTML = arr[i]
.split(RegExp(`(${val})`, 'i'))
.map((n, i) => i & 1 ? `<b>${n}</b>` : n)
.join('');
Сначала подумал что можно рандомизированный массив засунуть в set...
function randomArr(length, min, max) {
const values = new Set;
while (values.size < length) {
values.add((Math.random() * (max - min + 1) | 0) + min);
}
return [...values];
}
const arr = randomArr(40, 1, 100);
function randomArr(length, min, max) {
const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
return Array.from({ length }, () => arr.splice(Math.random() * arr.length | 0, 1)[0]);
}
function randomArr(length, min, max) {
const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
for (let i = arr.length; --i > 0;) {
const j = Math.random() * (i + 1) | 0;
[ arr[j], arr[i] ] = [ arr[i], arr[j] ];
}
return arr.slice(0, length);
}
infinite-scroll-distance
. Она задаёт расстояние от нижней границы прокручиваемого элемента, на котором должен сработать коллбек. Просто указываете сколько вам надо. const getClassStyles = className =>
[...document.styleSheets].reduce((styles, { cssRules }) => {
return [...cssRules]
.filter(n => n.selectorText === `.${className}`)
.reduce((styles, { cssText }) => {
return (cssText
.match(/[\w\-]+: [^;]+/g) || [])
.map(n => n.split(': '))
.reduce((styles, [ k, v ]) => (styles[k] = v, styles), styles);
}, styles);
}, {});
const styles = getClassStyles('class-name');