const widgetData = [
{ name: 'something', value: 14, date: '02.08.2018' },
{ name: 'something', value: 43, date: '03.08.2018' },
{ name: 'something', value: 44, date: '04.08.2018' },
{ name: 'something', value: 38, date: '05.08.2018' },
];
const startDate = '01.08.2018';
const endDate = '25.08.2018';
const widgetDataObj = widgetData.reduce((acc, n) => (acc[n.date] = n, acc), {});
const start = new Date(startDate.split('.').reverse().join('-'));
const end = new Date(endDate.split('.').reverse().join('-'));
const result = [];
for (; start <= end; start.setDate(start.getDate() + 1)) {
const date = start.toLocaleDateString('ru-RU');
result.push(widgetDataObj[date] || {
name: 'something',
value: 0,
date,
});
}
console.log(result);
const filterItem = (list, item) =>
list.map(n => ({
...n,
items: n.items.filter(m => m.id !== item.id),
}));
function removeItem(list, { id }) {
list.forEach(({ items: n }) => {
n.splice(0, n.length, ...n.filter(m => m.id !== id));
});
}
function recalc() {
const register = +$('[name="radio-register"]:checked').data('value');
$('#price_result, #price1').text(register
? register +
+$('#count-class option:selected').data('value') +
+$('[name="radio-znak"]:checked').data('value')
: 0
);
}
$('input[name="radio-znak"], input[name="radio-register"], #count-class').change(recalc);
recalc();
const max = (data, key = n => n) =>
Array.prototype.reduce.call(data, (max, n) => {
const val = key(n);
return val > max[1] ? [ n, val ] : max;
}, [ null, -Infinity ]);
const [ item, value ] = max(
form.querySelectorAll('.kursBtn'),
n => +n.nextElementSibling.value
);
form.querySelector('#winner').value = `${item.name} - ${value}`;
а как добавить классы к движущемуся объекту в местах остановки?
alert(({
1: 'b',
2: 'c',
})[a] || 'd');
false
, то извлекайте значение из объекта только в том случае, если ключ существует:const obj = {
1: 'b',
2: 'c',
7: null,
8: NaN,
};
const defaultValue = 'd';
alert(obj.hasOwnProperty(a) ? obj[a] : defaultValue);
<div class="budget-value"></div>
budget_value = document.getElementsByClassName('budget_value')[0]
budget_value.textContent = money
результат времени как при параллельном выполнении
Получается что new Promise( уже запускает на выполнение код? Его можно как то отложить?
const getA = () => new Promise((resolve, reject) => {
console.time('getA');
setTimeout(() => {
console.timeEnd('getA');
resolve(4)
}, 6000)
});
const getB = () => new Promise((resolve, reject) => {
console.time('getB');
setTimeout(() => {
console.timeEnd('getB');
resolve(2)
}, 2000)
});
console.time('get sum');
getA().then(a => {
getB().then(b => {
console.log(`result: ${a + b}`);
console.timeEnd('get sum');
})
});
Среда исполнения JS уже умеет параллельно?
let money, price,
let money,
price;
Есть ли что-то типо delegate() для такого случая?
const days = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
// или
const days = Array.from({ length: 7 }, (_, i) => new Date(1, 0, i)
.toLocaleString('ru', { weekday: 'long' })
.replace(/./, m => m.toUpperCase()
));
for (
let iDay = 0;
confirm(`${days[iDay]}. Хотите увидеть следующий день?`);
iDay = (iDay + 1) % days.length
) ;
сделал это так, но мне кажется, это не совсем производительно и есть решение получше
const lastId = arr.reduce((id, n) => n.glob_id || id, null);
// или
const lastId = (arr.filter(n => n.glob_id).pop() || {}).glob_id;
// или
const lastId = ([...arr].reverse().find(n => n.glob_id) || {}).glob_id;
// или
const lastId = arr.map(n => n.glob_id).filter(Boolean).pop();
let lastId = null;
for (let i = arr.length; i--;) {
if (arr[i].glob_id) {
lastId = arr[i].glob_id;
break;
}
}
const lastId = arr.findLast(n => n.glob_id)?.glob_id;
const parentSelector = 'div';
const childSelector = 'p';
const className = 'there';
const siblingsSelector = `${parentSelector} > ${childSelector}`;
const elementSelector = `${siblingsSelector}.${className}`;
const index = Array.prototype.findIndex.call(
document.querySelectorAll(siblingsSelector),
n => n.classList.contains(className)
);
let index = -1;
for (
let el = document.querySelector(elementSelector);
el;
index++, el = el.previousElementSibling
) ;
const el = document.querySelector(elementSelector);
const index = el ? [...el.parentNode.children].indexOf(el) : -1;
childSelector
, и они не должны учитываться, то третий вариант не подходит, а во втором надо заменить index++
на index += el.matches(childSelector)
. document.addEventListener('keypress', function(e) {
if (e.keyCode === 32) {
console.log('space pressed');
}
});
document.addEventListener('wheel', function(e) {
const event = new Event('keypress');
event.keyCode = 32;
document.dispatchEvent(event);
});
const selector = 'div p';
const removeFirst = 5;
const removeLast = 3;
document.querySelectorAll(selector).forEach((n, i, a) => {
if (i < removeFirst || i > a.length - removeLast - 1) {
n.remove();
}
});
document.querySelectorAll([
`${selector}:nth-child(-n+${removeFirst})`,
`${selector}:nth-last-child(-n+${removeLast})`,
]).forEach(n => n.replaceWith());