const invertTree = ({ value, left, right }) => {
const node = { value };
if (left) {
node.right = invertTree(left);
}
if (right) {
node.left = invertTree(right);
}
return node;
};
[data-type="
на [data-type*="
. fetch(filename)
.then(r => r.text())
.then(r => r.split('\n').map(n => {
const [ key, val ] = n.split(' = ');
return { [key]: val };
}))
.then(arr => {
// ну вот вам ваши объекты
});
r.split('\n')
на r.match(/\$[a-z0-9-]+ = #[0-9a-f]{6}/g)
, например. const months = Array.from({ length: 12 }, (n, i) => {
return new Date(0, i).toLocaleString('en', { month: 'short' }).toLowerCase();
});
const newArr = arr.map(({ data, ...item }) => (
data.forEach((n, i) => item[months[i]] = n),
item
));
link
, screen
- без цифр..screen
определяете ещё один класс:.screen {
display: none;
}
.screen.active {
display: flex;
}
$(document).on('click', '.link', function() {
const $screen = $(this).next().toggleClass('active');
$('.screen.active').not($screen).removeClass('active');
});
function combine(keys, values) {
const length = Math.max(0, ...values.map(n => n.length));
const arr = Array.from({ length }, () => ({}));
values.forEach((n, i) => n.forEach((m, j) => arr[j][keys[i]] = m));
return arr;
}
const newArray = combine([ 'name', 'id' ], [ nameArray, idArray ]);
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();
а как добавить классы к движущемуся объекту в местах остановки?
alert(({
1: 'b',
2: 'c',
})[a] || 'd')
<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() для такого случая?