X = 13 % 6 = 1
Y = floor(13 / 6) = 2
function generator(quantity, side = 6) {
const length = side * side;
if (quantity > length) throw new Error('too much u ask');
const options = Array.from({ length }, (_, i) => i); // [0,1,2,3, .. ,35]
const nToPoint = n => ({ x: n % side, y: Math.floor(n / side) }); // 13 => {x:1, y:2}
return Array.from({ length: quantity }, () =>
nToPoint(
options.splice(Math.floor(Math.random() * options.length), 1).pop()
)
);
}
console.log(generator(4));
// [{x:1,y:2}, {x:0,y:4}, {x:1,y:0}, {x:4,y:4}]
0..8
как div'ы в контейнере.textpayload = message.user.bonusNew ? `"{\"button\": \"дуэль\"}"` : "{\"button\": \"бонус_новичка\"}`"
`
const bonusButton = { button: message.user.bonusNew ? 'дуэль' : 'бонус_новичка' };
textpayload = JSON.stringify(bonusButton);
Object.freeze(location);
class Habr {
__values = [];
static delimiter = ';';
get qna() {
return this.__values.join(Habr.delimiter);
}
set qna(value) {
if (!this.__values.includes(value)) {
this.__values.push(value);
}
}
}
const foo = new Habr();
foo.qna = 'x=y';
foo.qna = 'a=b';
console.log(foo.qna); // x=y;a=b
условие ? выражение1 : выражение2
if .. else
, где нужны разные действия.setInterval()
использовать requestAnimationFrame()true
или false
. Разрешать или запрещать анимацию.requestAnimationFrame()
только если переменная true
.false
в true
, запускать отрисовку.console.log(work([-10, -20, -40])); // -40 - (-10) = -30 => 30
-10
вычитаем -
минимальное -40
:-10 - (-40) == -10 + 40 == 30
if..else
, Math.abs()
и TensorFlow )без reduce и т.д.Тогда и без
Math.max()
/ Math.min()
max
и min
равны первому элементу.max
. Если очередной больше, то обновляем max
. Та же логика с min
.Math.max()
+ Math.min()
,const checkArr = [!mailArr.length, !inputEmptyArr.length];
if (consentCheckbox) {
checkArr.push(consentCheckbox.checked);
}
btnSubmite.classList.toggle('valid-success', !checkArr.some(x => !x));
.checked
if()
every(=== true)
логически равноценно !some(=== false)
– интересует, есть ли хоть один false
.entity
внутри функции перестала указывать на тот же массив, что и fruits
,function loadEntities(entity, item) {
// тут entity из аргументов указывает туда же, куда и fruits
// можно вызывать методы того, внешнего массива, Те же push(), splice()
entity = []
// а тут entity стала указывать в другую сторону, на новый пустой массив
// fruits это уже никак не касается
entity.push(item)
// положили что-то в никчёмный массив
}
0
.const fruits = []; // навсегда
loadEntities(fruits, 'banana');
console.log(fruits);
loadEntities(fruits, 'apple');
console.log(fruits);
function loadEntities(entity, item) {
entity.length = 0; // массив тот же, но пуст
entity.push(item);
}
entity.splice(0, entity.length);
prompt()
возвращает текстовую строку."100"
меньше (по алфавиту) строки "50"
.let a = +prompt('Введите 1-е число');
let a = +prompt('Введите 1-е число');
let b = +prompt('Введите 2-е число');
if (a < b) {
[a, b] = [b, a]; // поменяли местами
}
// теперь точно a > b
alert(b + ',' + a);
alert(a + ',' + b);
Node.TEXT_NODE
и именем nodeName == "#text"