нужно вернуть true если элементы массива отсортированны по возрастанию, а если нет то false. Что не так в коде?«Не так» здесь то, что никак не проверяется отсортированность массива.
false
. true
.function isSorted(arr) {
const length = arr.length;
if (length < 2) return true;
for (let i = 1; i < length; i++) {
if (arr[i] < arr[i - 1]) return false;
}
return true;
}
isSorted([1,2,2,5,9]) // true
isSorted([4,3,5,8,44,88,23,145]) // false
6
и 2
— по две. Из-за этого неопределённость среди них.>>> frequency_sort([4, 6, 2, 2, 6, 4, 2, 4, 4])
[4, 4, 4, 4, 2, 2, 2, 6, 6]
def frequency_sort(items):
return sorted(items, key=lambda v: (items.count(v), v), reverse = True)
(function(e) {}) === (function(e) {}) // false
function func(e) {
console.log(e.target.id);
}
// Назначить событие
document.body.addEventListener('click', func);
// И сразу его удалить
document.body.removeEventListener('click', func);
const setPropChain = (obj, path, value) => {
path.split('.').reduce((acc, c, i, arr) => {
if (!acc.hasOwnProperty(c)) acc[c] = {};
if (typeof acc[c] !== "object") throw "Not an object prop " + c;
if (i === arr.length - 1) acc[c] = value;
return acc[c];
}, obj);
return obj;
}
// использование:
setPropChain({"test": 0}, "make.some.noise", "habr")
{
"test": 0,
"make": {
"some": {
"noise": "habr"
}
}
}
for (...) {
// что-то делается
if (condition) {
break; // досрочный выход из цикла
}
// ещё может что-то делается
}
for
, while
можно оборвать, выйти из них с помощью break
Array.forEach()
досрочно оборвать не удастся. каким образом допустим в этой функции мы используем массив(объект) не объявив егоОбъявляют переменные. Здесь обошлись без переменной.
5
? return 5;
— тут всё нормально.[1, 2, 3] // массив
{a: 1, b: 2} // объект
return [1, 2, 3]; // вернули массив
return {a: 1, b: 2}; // вернули объект
return [1, 2, 1 + 2]; // вернули массив, где что-то посчитали налету
return {a: 1, b: 1 + 1}; // вернули объект, что сложили в последний момент
+
является особенным оператором, исключением, отличающимся от других математических операторов.Почти все математические операторы выполняют численное преобразование. Исключение составляет +.Подробнее: https://learn.javascript.ru/type-conversions
Если одно из слагаемых является строкой, тогда и все остальные приводятся к строкам.
Тогда они конкатенируются (присоединяются) друг к другу:
alert( 1 + '2' ); // '12' (строка справа) alert( '1' + 2 ); // '12' (строка слева)
'42' / 2 // 21
'42' - 2 // 40
'42' * 2 // 84
'42' + 2 // "422" ¯\_(ツ)_/¯
1 + 2 + 3 + 4 + 5 // 15
1 + 2 + 3 + '4' + 5 // "645"
+
работает слева-направо. Поэтому 1+2+3
всё ещё число, а дальше '4'
заставляет переключиться на строки. arr[0] // первый элемент, объект:
{
variation: {
attributes: {
"attribute_pa_obem": "500-gr",
"attribute_pa_czvet-produkta": "c-110-goluboj"
}
}
}
variation
: arr[0].variation // там объект с единственным свойством "attributes"
attributes
: arr[0].variation.attributes // там объект с искомыми двумя свойствами
arr[0].variation.attributes["attribute_pa_obem"] // "500-gr"
arr[0].variation.attributes["attribute_pa_czvet-produkta"] // "c-110-goluboj"
const ref = arr[0].variation.attributes;
ref["attribute_pa_obem"] // "500-gr"
ref["attribute_pa_czvet-produkta"] // "c-110-goluboj"
arr[0].variation.attributes.attribute_pa_obem // "500-gr"
// или
ref.attribute_pa_obem // "500-gr"
const arr = [0, 0, 0];
Object.freeze(arr); // ма-агия!
arr.unshift(100); // выбросит ошибку: нельзя менять свойство длины, оно non-writeable
arr[1] = 'z'; // ошибки не будет, но
console.log(arr) // [0,0,0]
(s => `${s.substr(0,2)}.${s.substr(2,2)}.${s.substr(4)}`)('30032020')
const format = (_, v) => {
const s = v.toString();
return `${s.substr(0,2)}.${s.substr(2,2)}.${s.substr(4)}`;
}
format`${30032020}`
const num = 30032020; // число
const str = num.toString().padStart(8, '0'); // строка длиной 8 символов
const result = `${str.substr(0,2)}.${str.substr(2,2)}.${str.substr(4)}`; // "30.03.2020"