Стрелочная функция. Array.some, Array.forEach
Tarasov, Basic JS
by shurikation
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
'use strict'
// https://www.youtube.com/watch?v=bqeb-j4_F3M&feature=youtu.be
//Сделать функцию, которй мы передадим массив и элемент. Она будет проверять есть ли такой элемент в массиве
const arr = [1, 5, 18, 25];
const val1 = 5;
const val2 = 500;
console.log(some(arr, val1)); // true
console.log(some(arr, val2)); // false
//some ищет элемент. Мы делаем как бы перебор массива.Тот же some, но циклом:
function some (arr, element) {
for (const arrElem of arr) {
if(arrElem === element) {
return true;
}
}
return false;
}
/***** С объектами все сложнее, чем с числами.*****/
const arr2 = [
{x: 5, y: 5},
{x: 2, y: 6},
{x: 0, y: 10},
];
const val3 = {x: 2, y: 6};
const val4 = {x: 13, y: 13};
console.log(some(arr, val3)); // false
console.log(some(arr, val4)); // false
//Везде false. Потому что объекты сравниваются по ссылке. Два объекта никогда не будут равны друг другу т.к. занимают разные ячейки в памяти. Как сравнивать? Можно так:
val3.x === val4.x && val3.y === val4.y //сравниваем все свойства объекта по отдельности, но это неудобно. А вдруг объекты другие, или опять будут работать с числами. Что делать?
function compare(arrayPoint) {
return arrayPoint.x === val3.x && arrayPoint.y === val3.y;
}
//Вносим изменения в функцию some. Теперь она ищет хотя бы один элемент, удовлетворяющий условию функции compare
function some2 (arr2, compare) {
for (const arrElem of arr2) {
if(compare(arrElem)) { //!!Здесь мы ЗАПУСКАЕМ функцию compare
return true;
}
}
return false;
}
console.log('Функция compare выдала: ' + some2(arr2, compare)); //!!Здесь мы ПЕРЕДАЕМ функцию compare в some2, ну и запускаем some2 естестна
//Круто, но это тоже неудобно. Удобнее сделать стрелочную функцию:
console.log('Стерлочная функция выдала:' + some2(arr2,...