const arr1 = [[8, 12], [17, 22]];
const arr2 = [[5, 11], [14, 18], [20, 23]];
const result = arr1.reduce((acc, range1) => {
arr2.forEach((range2) => {
const rangeLength1 = range2[1] - range1[0];
const rangeLength2 = range1[1] - range2[0];
if(rangeLength1 < rangeLength2) {
if(rangeLength1 < 0) {
return;
}
acc.push([range1[0], range2[1]]);
return;
}
if(rangeLength2 < 0) {
return;
}
acc.push([range2[0], range1[1]]);
});
return acc;
}, []);
const a = [[8, 12], [17, 22]];
const b = [[5, 11], [14, 18], [20, 23]];
const result = a.reduce((acc, rangeA) => {
return b.reduce((list, rangeB) => {
if (rangeA[0] >= rangeB[1] || rangeA[1] <= rangeB[0]) {
return list;
}
const from = Math.max(rangeA[0], rangeB[0]);
const to = Math.min(rangeA[1], rangeB[1]);
return [...list, [from, to]];
}, acc);
}, []);
const updateSquares = (axis, step, max) => {
clearRect();
const minAxis = `min${axis.toUpperCase()}`;
const maxValue = max - 12;
squares.forEach((square) => {
square[minAxis] = (maxValue + square[minAxis] + step) % maxValue;
});
updateRect(squares);
}
function moveRect(event) {
switch (event.keyCode) {
// left
case 37:
updateSquares('x', -25, WIDTH);
break
// up
case 38:
updateSquares('y', -25, HEIGHT);
break
// right
case 39:
updateSquares('x', 25, WIDTH);
break
// down
case 40:
updateSquares('y', 25, HEIGHT);
break
default:
break
}
}
.icon {
margin-bottom: auto;
}
class Div extends Component {
constructor(props) {
super(props);
this.props=props;
}
showAlert(value) {
alert(value);
}
render() {
this.showAlert(1);
return (
<div>
</div>
);
}
}
class Div extends Component {
constructor(props) {
super(props);
this.props=props;
}
showEvent(e) {
alert(e);
}
render() {
this.showAlert(1);
return (
<div>
<button onClick={this.showEvent}></button>
</div>
);
}
}
var self = this
- сохранение в переменную.apply
- вызов метода с явной передачей контекста.bind(some)
- привязка контекста. Говорит функции что использовать в качестве контекста, потом изменить контекст нельзя.()=>{}
- стрелочная функция, которая в отличие от function(){}
- определяет контекст не в момент вызова, а в момент объявления.// вызов
obj.foo();
// и вызов
const bar = obj.foo;
bar();
// оба вызывают foo, но во втором случае this внутри foo будет привязан не к obj,
// а к глобальному объекту
(true && false)
- false, при логическом "и" вернется true, если оба операнда true(true || false)
- true, логическое "или" возвращает true, если хотя бы один операнд truetrue && Boolean(0)
- false, Boolean(0) вернет false, т.к. в качестве параметра передан 0.!'String' || false
- false, непустая строка при приведении к boolean равна true, !true === false