beautify 1st part of the tutorial

This commit is contained in:
Ilya Kantor 2015-03-10 12:36:58 +03:00
parent e3dd2cedc0
commit 6444024a9d
327 changed files with 2358 additions and 1986 deletions

View file

@ -11,6 +11,6 @@ var fruits = ["Яблоко", "Груша", "Слива"];
То есть, для массива длины `goods`:
```js
var lastItem = goods[goods.length-1]; // получить последний элемент
var lastItem = goods[goods.length - 1]; // получить последний элемент
```

View file

@ -4,6 +4,7 @@
Например, для `[-1, 2, 3, -9, 11]`:
```js
//+ no-beautify
// Начиная с -1:
-1
-1 + 2
@ -41,9 +42,9 @@
function getMaxSubSum(arr) {
var maxSum = 0; // если совсем не брать элементов, то сумма 0
for(var i=0; i<arr.length; i++) {
for (var i = 0; i < arr.length; i++) {
var sumFixedStart = 0;
for(var j=i; j<arr.length; j++) {
for (var j = i; j < arr.length; j++) {
sumFixedStart += arr[j];
maxSum = Math.max(maxSum, sumFixedStart);
}
@ -76,8 +77,9 @@ alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
```js
//+ run
function getMaxSubSum(arr) {
var maxSum = 0, partialSum = 0;
for (var i=0; i<arr.length; i++) {
var maxSum = 0,
partialSum = 0;
for (var i = 0; i < arr.length; i++) {
partialSum += arr[i];
maxSum = Math.max(maxSum, partialSum);
if (partialSum < 0) partialSum = 0;

View file

@ -4,8 +4,8 @@
//+ run
var styles = ["Джаз", "Блюз"];
styles.push("Рок-н-Ролл");
styles[styles.length-2] = "Классика";
styles[styles.length - 2] = "Классика";
alert( styles.shift() );
styles.unshift( "Рэп", "Регги ");
styles.unshift("Рэп", "Регги ");
```

View file

@ -14,6 +14,7 @@
Массив в результате каждого шага:
```js
//+ no-beautify
Джаз, Блюз
Джаз, Блюз, Рок-н-Ролл
Джаз, Классика, Рок-н-Ролл

View file

@ -4,8 +4,8 @@
//+ run
var arr = ["Яблоко", "Апельсин", "Груша", "Лимон"];
var rand = Math.floor( Math.random() * arr.length );
var rand = Math.floor(Math.random() * arr.length);
alert(arr[rand]);
alert( arr[rand] );
```

View file

@ -11,6 +11,6 @@ var arr = ["Яблоко", "Апельсин", "Груша", "Лимон"];
P.S. Код для генерации случайного целого от `min` to `max` включительно:
```js
var rand = min + Math.floor( Math.random() * (max+1-min) );
var rand = min + Math.floor(Math.random() * (max + 1 - min));
```

View file

@ -4,20 +4,20 @@
//+ run demo
var numbers = [];
while(true) {
while (true) {
var value = prompt("Введите число", 0);
if (value === "" || value === null || isNaN(value)) break;
numbers.push(+value);
}
var sum = 0;
for(var i=0; i<numbers.length; i++) {
for (var i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
alert(sum);
alert( sum );
```

View file

@ -2,13 +2,13 @@
```js
//+ run
var arr = [1,2,3];
var arr = [1, 2, 3];
var arr2 = arr; // (*)
arr2[0] = 5;
alert(arr[0]);
alert(arr2[0]);
alert( arr[0] );
alert( arr2[0] );
```
Код выведет `5` в обоих случаях, так как массив является объектом. В строке `(*)` в переменную `arr2` копируется ссылка на него, а сам объект в памяти по-прежнему один, в нём отражаются изменения, внесенные через `arr2` или `arr`.
@ -19,6 +19,6 @@ alert(arr2[0]);
```js
var arr2 = [];
for(var i=0; i<arr.length; i++) arr2[i] = arr[i];
for (var i = 0; i < arr.length; i++) arr2[i] = arr[i];
```

View file

@ -5,14 +5,14 @@
Что выведет этот код?
```js
var arr = [1,2,3];
var arr = [1, 2, 3];
var arr2 = arr;
arr2[0] = 5;
*!*
alert(arr[0]);
alert(arr2[0]);
alert( arr[0] );
alert( arr2[0] );
*/!*
```

View file

@ -3,10 +3,10 @@
```js
function find(array, value) {
for(var i=0; i<array.length; i++) {
for (var i = 0; i < array.length; i++) {
if (array[i] == value) return i;
}
return -1;
}
```
@ -22,10 +22,10 @@ function find(array, value) {
return array.indexOf(value);
}
for(var i=0; i<array.length; i++) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) return i;
}
return -1;
}
@ -33,14 +33,14 @@ var arr = ["a", -1, 2, "b"];
var index = find(arr, 2);
alert(index);
alert( index );
```
... Но еще лучшим вариантом было бы определить `find` по-разному в зависимости от поддержки браузером метода `indexOf`:
```js
// создаем пустой массив и проверяем поддерживается ли indexOf
if ( [].indexOf ) {
if ([].indexOf) {
var find = function(array, value) {
return array.indexOf(value);
@ -48,10 +48,10 @@ if ( [].indexOf ) {
} else {
var find = function(array, value) {
for(var i=0; i<array.length; i++) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) return i;
}
return -1;
}

View file

@ -7,7 +7,7 @@
Например:
```js
arr = [ "test", 2, 1.5, false ];
arr = ["test", 2, 1.5, false];
find(arr, "test"); // 0
find(arr, 2); // 1

View file

@ -12,7 +12,7 @@
function filterRange(arr, a, b) {
var result = [];
for(var i=0; i<arr.length; i++) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] >= a && arr[i] <= b) {
result.push(arr[i]);
}
@ -24,6 +24,6 @@ function filterRange(arr, a, b) {
var arr = [5, 4, 3, 8, 0];
var filtered = filterRange(arr, 3, 5);
alert(filtered);
alert( filtered );
```

View file

@ -5,7 +5,7 @@
// шаг 1
var arr = [];
for (var i=2; i<100; i++) {
for (var i = 2; i < 100; i++) {
arr[i] = true
}
@ -14,27 +14,27 @@ var p = 2;
do {
// шаг 3
for (i=2*p; i<100; i+=p) {
for (i = 2 * p; i < 100; i += p) {
arr[i] = false;
}
// шаг 4
for (i=p+1; i<100; i++) {
for (i = p + 1; i < 100; i++) {
if (arr[i]) break;
}
p = i;
} while (p*p < 100); // шаг 5
} while (p * p < 100); // шаг 5
// шаг 6 (готово)
// посчитать сумму
var sum = 0;
for (i=0; i<arr.length; i++) {
for (i = 0; i < arr.length; i++) {
if (arr[i]) {
sum += i;
}
}
alert(sum);
alert( sum );
```

View file

@ -30,9 +30,9 @@ var fruits = ["Яблоко", "Апельсин", "Слива"];
//+ run
var fruits = ["Яблоко", "Апельсин", "Слива"];
alert(fruits[0]); // Яблоко
alert(fruits[1]); // Апельсин
alert(fruits[2]); // Слива
alert( fruits[0] ); // Яблоко
alert( fruits[1] ); // Апельсин
alert( fruits[2] ); // Слива
```
Элемент можно всегда заменить:
@ -51,9 +51,9 @@ fruits[3] = 'Лимон'; // теперь ["Яблоко", "Апельсин", "
```js
//+ run
var fruits = ["Яблоко", "Апельсин", "Груша"];
var fruits = ["Яблоко", "Апельсин", "Груша"];
alert(fruits.length); // 3
alert( fruits.length ); // 3
```
**Через `alert` можно вывести и массив целиком.**
@ -62,9 +62,9 @@ alert(fruits.length); // 3
```js
//+ run
var fruits = ["Яблоко", "Апельсин", "Груша"];
var fruits = ["Яблоко", "Апельсин", "Груша"];
alert(fruits); // Яблоко,Апельсин,Груша
alert( fruits ); // Яблоко,Апельсин,Груша
```
**В массиве может храниться любое число элементов любого типа.**
@ -72,7 +72,7 @@ alert(fruits); // Яблоко,Апельсин,Груша
В том числе, строки, числа, объекты, вот например:
```js
//+ run
//+ run no-beautify
// микс значений
var arr = [ 1, 'Имя', { name: 'Петя' }, true ];
@ -108,7 +108,7 @@ var fruits = ["Яблоко", "Апельсин", "Груша"];
alert( fruits.pop() ); // удалили "Груша"
alert(fruits); // Яблоко, Апельсин
alert( fruits ); // Яблоко, Апельсин
```
</dd>
@ -121,7 +121,7 @@ var fruits = ["Яблоко", "Апельсин"];
fruits.push("Груша");
alert(fruits); // Яблоко, Апельсин, Груша
alert( fruits ); // Яблоко, Апельсин, Груша
```
Является полным аналогом `fruits[fruits.length] = ...`.
@ -139,7 +139,7 @@ var fruits = ["Яблоко", "Апельсин", "Груша"];
alert( fruits.shift() ); // удалили Яблоко
alert(fruits); // Апельсин, Груша
alert( fruits ); // Апельсин, Груша
```
</dd>
@ -151,7 +151,7 @@ var fruits = ["Апельсин", "Груша"];
fruits.unshift('Яблоко');
alert(fruits); // Яблоко, Апельсин, Груша
alert( fruits ); // Яблоко, Апельсин, Груша
```
</dd>
@ -167,7 +167,7 @@ fruits.push("Апельсин", "Персик");
fruits.unshift("Ананас", "Лимон");
// результат: ["Ананас", "Лимон", "Яблоко", "Апельсин", "Персик"]
alert(fruits);
alert( fruits );
```
## Внутреннее устройство массива
@ -184,10 +184,10 @@ function eat(arr) {
var arr = ["нам", "не", "страшен", "серый", "волк"]
alert(arr.length); // 5
alert( arr.length ); // 5
eat(arr);
eat(arr);
alert(arr.length); // 3, в функцию массив не скопирован, а передана ссылка
alert( arr.length ); // 3, в функцию массив не скопирован, а передана ссылка
```
**Ещё одно следствие -- можно присваивать в массив любые свойства.**
@ -215,7 +215,7 @@ var a = [];
a[0] = 0;
a[5] = 5;
alert(a); // 0,,,,,5
alert( a ); // 0,,,,,5
```
Эти запятые появляются потому, что алгоритм вывода массива идёт от `0` до `arr.length` и выводит всё через запятую. Отсутствие значений даёт несколько запятых подряд.
@ -254,7 +254,7 @@ fruits.shift(); // убрать 1 элемент с начала
Действия при операции:
```js
fruits.pop(); // убрать 1 элемент с конца
fruits.pop(); // убрать 1 элемент с конца
```
<img src="array-pop.svg">
@ -273,7 +273,7 @@ fruits.pop(); // убрать 1 элемент с конца
var arr = ["Яблоко", "Апельсин", "Груша"];
*!*
for (var i=0; i<arr.length; i++) {
for (var i = 0; i < arr.length; i++) {
alert( arr[i] );
}
*/!*
@ -339,13 +339,13 @@ alert(arr.length); // *!*1001*/!*
```js
//+ run
var arr = [1, 2, 3, 4, 5];
var arr = [1, 2, 3, 4, 5];
arr.length = 2; // укоротить до 2 элементов
alert(arr); // [1, 2]
alert( arr ); // [1, 2]
arr.length = 5; // вернуть length обратно, как было
alert(arr[3]); // undefined: значения не вернулись
alert( arr[3] ); // undefined: значения не вернулись
```
Самый простой способ очистить массив -- это `arr.length=0`.
@ -367,12 +367,12 @@ var arr = *!*new Array*/!*("Яблоко", "Груша", "и т.п.");
```js
//+ run
var arr = new Array(2, 3);
alert(arr[0]); // 2, создан массив [2, 3], всё ок
var arr = new Array(2, 3);
alert( arr[0] ); // 2, создан массив [2, 3], всё ок
*!*
arr = new Array(2); // создаст массив [2] ?
alert(arr[0]); // undefined! у нас массив без элементов, длины 2
alert( arr[0] ); // undefined! у нас массив без элементов, длины 2
*/!*
```
@ -394,7 +394,7 @@ var matrix = [
[7, 8, 9]
];
alert(matrix[1][1]); // центральный элемент
alert( matrix[1][1] ); // центральный элемент
```
## Внутреннее представление массивов
@ -428,10 +428,10 @@ alert(matrix[1][1]); // центральный элемент
```js
// предпочтительное
var arr = [ элемент1, элемент2... ];
var arr = [элемент1, элемент2...];
// new Array
var arr = new Array( элемент1, элемент2...);
var arr = new Array(элемент1, элемент2...);
```
При этом `new Array(число)` создаёт массив заданной длины, *без элементов*. Чтобы избежать ошибок, предпочтителен первый синтаксис.