function getWinner(points) {
const [ a, b ] = points.reduce((acc, n) => (
n.split('-').forEach((m, i) => acc[i] += +m),
acc
), [ 0, 0 ]);
return a === b
? undefined
: a < b ? 2 : 1;
}
const getWinner = points => [ 2, , 1 ][Math.sign(eval(points.join('+'))) + 1];
Есть ли способ это сделать без потерь в деталях?
Object.values(data.reduce((acc, n) => {
(acc[n.code] ||= {
code: n.code,
name: n.name,
variants: [],
}).variants.push(n);
return acc;
}, {}))
const seq = [1];
let upper = 0;
let lower = 0;
const dblLinear = n => {
while (n >= seq.length) {
const y = seq[lower] * 2 + 1;
const z = seq[upper] * 3 + 1;
if (y < z) {
seq.push(y);
lower += 1;
}
else {
seq.push(z);
upper += 1;
}
}
return seq[n];
}
[1, 3]
– это оператор. Выражение во вторых квадратных скобках возвращает тройку, [3,2,2,8,5][3]
возвращает элемент массива с индексом 3, то есть четвёртый по счёту, то есть 8
.const getPrimitives = data =>
data instanceof Object
? Object.values(data).flatMap(getPrimitives)
: [ data ];
function getPrimitives(data) {
const result = [];
const stack = [];
for (let i = 0, arr = [ data ]; i < arr.length || stack.length; i++) {
if (i === arr.length) {
[ i, arr ] = stack.pop();
} else if (arr[i] instanceof Object) {
stack.push([ i, arr ]);
[ i, arr ] = [ -1, Object.values(arr[i]) ];
} else {
result.push(arr[i]);
}
}
return result;
}
// или
function getPrimitives(data) {
const result = [];
for (const stack = [ data ]; stack.length; ) {
const n = stack.pop();
if (n instanceof Object) {
stack.push(...Object.values(n).reverse());
} else {
result.push(n);
}
}
return result;
}