var
больше не стоит использовать, вообще. Только let
и const
.var a = 5;
— тут происходит 2 вещи: function a()
уплывает наверх выше назначения a = 5
, которое оказывается после всех деклараций. Можно даже так:function a() {
return 10;
}
a = 5;
Это, по сути, и происходит в 1-м примере. localStorage
это возможность браузеров, а не особенность языка.const dict = [];
arrObj.forEach((el, i) => {
if (! dict.includes(el.key)) dict.push(el.key);
el.sorter = dict.indexOf(el.key);
});
arrObj.sort((a, b) => a.sorter < b.sorter ? -1 : (a.sorter > b.sorter ? 1 : a.id - b.id));
arrObj.forEach((el) => delete el.sorter);
console.log(arrObj);
canvas
. Картинки должны быть с того же домена, что и страница.function getPixel(url, x, y) {
var img = new Image();
img.src = url;
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
return context.getImageData(x, y, 1, 1).data;
}
PIXI
есть свойство loader
. Его можно получить так: PIXI.loader
loader
, в свою очередь, есть метод add()
. Вызывается как Loader.add()
Это, если бы мы результат в промежуточную переменную записали: var Loader = PIXI.loader; Loader.add()
load()
.PIXI.loader.add("images/anyImage.png").load(setup)
Для читаемости разнесены по строкам. removeEventListener('click', mainFunc);
mainFunc
и прочие вызывать только после отработки асинхронного кода.addEventListener()
на этой кнопке, чтобы все последующие обработчики складывать в массив. И вызывать их из массива только после своего и mainFunc
.min
до max
,min
до max - 1
.0 1 2 3 4 5
^ выпало "2"
для второго остались:
0 1 3 4 5
выбираем случайное из
0 1 2 3 4
и если получилось >= 2
то добавляем 1
0 1 2 3 4
^ выпало "4"
добавили 1 получилось 5
Итого, 2 и 5.function twoRandom(min, max) {
if (min > max - 1) throw "min should be less or equal max - 1";
a = Math.floor(Math.random() * (max - min + 1)) + min;
b = Math.floor(Math.random() * (max - min)) + min;
if (b >= a) b = b + 1;
return [a, b];
}
for (let n = 11; n <= 31; n = n + 2) {
if (isPrime(n)) {
console.log(n);
}
}
function isPrime(n) {
for (let i = 3, root = Math.sqrt(n); i <= root; i++) {
if (n % i === 0) return false;
}
return true;
}
const validClasses = ['className', 'jobsWrapper'];
return [...el.classList].some(className => validClasses.includes(className));
const data = arr.reduce((acc, c) => {
c.properties.groups.forEach((group) => {
if (! acc.hasOwnProperty(group.id)) acc[group.id] = [];
acc[group.id].push(group["well-being"]);
});
return acc;
}, {});
/*
{
0: [0.9, 0.8, 0.8],
1: [0.5, 0.3, 0.1],
2: [0.4, 0.8, 0.6]
} */
const avg = {};
for (let id in data) {
avg[id] = data[id].reduce((acc, c) => acc + c) / data[id].length;
}
console.log(avg); /*
{
0: 0.8333333333333334,
1: 0.3,
2: 0.6000000000000001 // 0.1 + 0.2 !== 0.3
} */
innerHTML
, а узлы, DOM Nodes, рекурсивно. Из них рассматривать только текстовые, и менять в них. // bad
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// bad
$('#items').
find('.selected').
highlight().
end().
find('.open').
updateCount();
// good
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// bad
const leds = stage.selectAll('.led').data(data).enter().append('svg:svg').classed('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.classed('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', `translate(${radius + margin},${radius + margin})`)
.call(tron.led);
// good
const leds = stage.selectAll('.led').data(data);