const getItemSum = item => item.count * item.price;
let sum = 0;
for (let i = 0; i < data.length; i++) {
sum = sum + getItemSum(data[i]);
}
// или
let sum = 0;
for (const n of data) {
sum += getItemSum(n);
}
const sum = data.reduce((acc, n) => acc + getItemSum(n), 0);
// или
const sum = eval(data.map(getItemSum).join('+')) || 0;
const sum = (function getSum(i, n = data[i]) {
return n
? getItemSum(n) + getSum(i + 1)
: 0;
})(0);
Object.values(tasks.reduce((acc, { user: { id, name }, ...n }) => {
(acc[id] = acc[id] || { user: { id, name, tasks: [] } }).user.tasks.push(n);
return acc;
}, {}))
[object Object]
, дефолтное строковое представление объектов. Если первый аргумент, переданный в JSON.parse, не является строкой, он будет в строку преобразован. Вы пытаетесь распарсить объект. Нет необходимости использовать JSON.parse, всё уже как надо. const selectors = {
wrapper: '.numberQut',
input: '.qut',
minus: '.minusQus',
plus: '.plusQus',
};
const limits = {
min: 1,
max: 5,
};
const updateValue = (el, change = 0) =>
el.value = Math.min(limits.max, Math.max(limits.min, (parseInt(el.value) || 0) + change));
document.addEventListener('click', ({ target: t }) => {
const change = +t.matches(selectors.plus) || -t.matches(selectors.minus);
if (change) {
updateValue(t.closest(selectors.wrapper).querySelector(selectors.input), change);
}
});
document.addEventListener('input', ({ target: t }) => {
if (t.matches(selectors.input)) {
updateValue(t);
}
});
Object.values(arr.reduce((acc, n) => {
const date = n.date.split(' ', 1)[0];
(acc[0][date] = acc[0][date] || { id: ++acc[1], date, docs: [] }).docs.push(n);
return acc;
}, [ {}, 0 ])[0])
[...arr.reduce((acc, n) => {
const [ date ] = n.date.match(/\S+/);
acc.set(date, acc.get(date) || { id: -~acc.size, date, docs: [] }).get(date).docs.push(n);
return acc;
}, new Map).values()]
let show = 1;
function sh() {
const [ display, text ] = [ [ 'none', 'Развернуть' ], [ 'block', 'Свернуть' ] ][show ^= 1];
[...document.querySelectorAll('.list-row')].slice(3).forEach(n => n.style.display = display);
document.querySelector('#button').textContent = text;
}
window.addEventListener('load', sh);
function walk(node) {
if (node) {
console.log(node);
walk(node.next);
}
}
function walk(node) {
while (node) {
console.log(node);
node = node.next;
}
}
.tags li.hidden {
display: none;
}
document.querySelectorAll('.tags b').forEach(n => {
n.closest('li').classList.add('xxx');
n.addEventListener('click', onClick);
});
function onClick(e) {
for (
let el = e.target.closest('li');
(el = el.nextElementSibling) && !el.classList.contains('xxx');
el.classList.toggle('hidden')
) ;
}
.active {
height: 300px;
cursor: pointer;
background-color: green;
overflow: auto;
}
$('.qwerty').on('click', function() {
$(this).toggleClass('active');
});
document.addEventListener('click', function(e) {
const t = e.target;
if (t.matches('button.apply-button') && t.closest('blabla')) {
// ...
}
});
const colors = [
'red', 'blue', 'magenta', 'green', 'yellow',
'aqua', 'brown', 'silver', 'lime'
];
for (let i = colors.length; --i > 0;) {
const j = Math.random() * (i + 1) | 0;
[ colors[i], colors[j] ] = [ colors[j], colors[i] ];
}
document.querySelectorAll('.item').forEach((n, i) => {
n.style.backgroundColor = colors[i];
});
Object.assign(users.find(n => n.id === id), user);
const u = users.find(n => n.id === id);
if (u) {
Object.assign(u, user);
} else {
// добавляем, например
users.push({ ...user, id });
}
class Element {
constructor(el) {
this.el = el;
this.button = this.el.querySelector('[data-element-ref="button"]');
this.template = this.el.querySelector('[data-element-ref="template"]');
this.button.addEventListener('click', this.onClickPrimaryButton);
this.template.addEventListener('click', this.onClickButtonElement);
}
onClickPrimaryButton = () => {
this.template.innerHTML += template;
}
onClickButtonElement = (e) => {
if (e.target.dataset.elementRef === 'template-button') {
console.log(e.target);
}
}
}
const usersList = users.map(n => `${n.firstName} ${n.lastName} ${n.email}`);
const usersList = users.map(function(n) {
return this.map(k => n[k]).join(' ');
}, [ 'firstName', 'lastName', 'email' ]);