renovations
This commit is contained in:
parent
4b8b168fd2
commit
c7d4c7e3ff
172 changed files with 869 additions and 244 deletions
|
@ -0,0 +1,11 @@
|
|||
function find(array, value) {
|
||||
if (array.indexOf) { // если метод существует
|
||||
return array.indexOf(value);
|
||||
}
|
||||
|
||||
for(var i=0; i<array.length; i++) {
|
||||
if (array[i] === value) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
26
1-js/4-data-structures/7-array/7-array-find/_js.view/test.js
Normal file
26
1-js/4-data-structures/7-array/7-array-find/_js.view/test.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
describe("find", function() {
|
||||
|
||||
describe("возвращает позицию, на которой найден элемент", function() {
|
||||
it("в массиве [1,2,3] находит 1 на позиции 0", function() {
|
||||
assert.equal( find([1, 2, 3], 1), 0);
|
||||
});
|
||||
it("в массиве [1,2,3] находит 2 на позиции 1", function() {
|
||||
assert.equal( find([1, 2, 3], 2), 1);
|
||||
});
|
||||
it("в массиве [1,2,3] находит 3 на позиции 2", function() {
|
||||
assert.equal( find([1, 2, 3], 3), 2);
|
||||
});
|
||||
});
|
||||
|
||||
it("если элемент не найден, возвращает -1", function() {
|
||||
assert.equal( find([1,2,3], 0), -1);
|
||||
});
|
||||
|
||||
it("отличает false или null от 0", function() {
|
||||
assert.equal( find([false, true, null], 0), -1);
|
||||
});
|
||||
|
||||
it("отличает 1 от true", function() {
|
||||
assert.equal( find([1, 2, 3], true), -1);
|
||||
});
|
||||
});
|
61
1-js/4-data-structures/7-array/7-array-find/solution.md
Normal file
61
1-js/4-data-structures/7-array/7-array-find/solution.md
Normal file
|
@ -0,0 +1,61 @@
|
|||
Возможное решение:
|
||||
|
||||
```js
|
||||
function find(array, value) {
|
||||
|
||||
for(var i=0; i<array.length; i++) {
|
||||
if (array[i] == value) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
```
|
||||
|
||||
Однако, в нем ошибка, т.к. сравнение `==` не различает `0` и `false`.
|
||||
|
||||
Поэтому лучше использовать `===`. Кроме того, в современном стандарте JavaScript существует встроенная фунция <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf">Array#indexOf</a>, которая работает именно таким образом. Имеет смысл ей воспользоваться, если браузер ее поддерживает.
|
||||
|
||||
```js
|
||||
//+ run
|
||||
function find(array, value) {
|
||||
if (array.indexOf) { // если метод существует
|
||||
return array.indexOf(value);
|
||||
}
|
||||
|
||||
for(var i=0; i<array.length; i++) {
|
||||
if (array[i] === value) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
var arr = ["a", -1, 2, "b"];
|
||||
|
||||
var index = find(arr, 2);
|
||||
|
||||
alert(index);
|
||||
```
|
||||
|
||||
... Но еще лучшим вариантом было бы определить `find` по-разному в зависимости от поддержки браузером метода `indexOf`:
|
||||
|
||||
```js
|
||||
// создаем пустой массив и проверяем поддерживается ли indexOf
|
||||
if ( [].indexOf ) {
|
||||
|
||||
var find = function(array, value) {
|
||||
return array.indexOf(value);
|
||||
}
|
||||
|
||||
} else {
|
||||
var find = function(array, value) {
|
||||
for(var i=0; i<array.length; i++) {
|
||||
if (array[i] === value) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Этот способ - лучше всего, т.к. не требует при каждом запуске `find` проверять поддержку `indexOf`.
|
18
1-js/4-data-structures/7-array/7-array-find/task.md
Normal file
18
1-js/4-data-structures/7-array/7-array-find/task.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Поиск в массиве
|
||||
|
||||
[importance 3]
|
||||
|
||||
Создайте функцию `find(arr, value)`, которая ищет в массиве `arr` значение `value` и возвращает его номер, если найдено, или `-1`, если не найдено.
|
||||
|
||||
Например:
|
||||
|
||||
```js
|
||||
arr = [ "test", 2, 1.5, false ];
|
||||
|
||||
find(arr, "test"); // 0
|
||||
find(arr, 2); // 1
|
||||
find(arr, 1.5); // 2
|
||||
|
||||
find(arr, 0); // -1
|
||||
```
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue