Изучаем MooTools. Шаг 3 - Массивы

  • Содержание

В прошлой статье мы узнали, как получить выборку в массиве. Рассмотрим функции, как этот массив обработать.

Основные функции

.each();

Вызывает функцию fn для каждого элемента массива.

myArray.each(fn[, bind]);

Функция fn может иметь следующие параметры:

  • item - текущий элемент массива
  • index - его индекс
  • array - сам массив
list.each( function(item, i) {
	alert (item.getProperty('value')); //значение текущего элемента
});
  • bind - объект, к которому можно обращаться по указателю this

Вместо list мы можем использовать функции $$(), .getElements(), описанные в предыдущей статье.

$A()

Создает копию массива.

var anArray = [0, 1, 2, 3, 4];
var copiedArray = $A(anArray); //возвращает [0, 1, 2, 3, 4].

.every()

Возвращает true, если каждый элемент массива удовлетворяет условию функции fn.

var areAllBigEnough = [10, 4, 25, 100].every(function(item, index){
	return item > 20;
}); //areAllBigEnough = false

.some()

Возвращает true, если хотя бы один элемент массива удовлетворяет условию функции fn.

var isAnyBigEnough = [10, 4, 25, 100].some(function(item, index){
	return item > 20;
}); //isAnyBigEnough = true

.filter()

Возвращает массив из элементов исходного, если они удовлетворяют условию функции fn.

var biggerThanTwenty = [10, 3, 25, 100].filter(function(item, index){
	return item > 20;
}); //biggerThanTwenty = [25, 100]

.clean()

Возвращает массив из элементов исходного, если они определены.

var myArray = [null, 1, 0, true, false, "foo", undefined, ""];
myArray.clean() // возвращает [1, 0, true, false, "foo", ""]

.contains()

Возвращает true, если элемент содержится в массиве. Разрешается указывать позиции, с которой надо производить поиск.

["a","b","c"].contains("a"); //возвращает true
["a","b","c"].contains("d"); //возвращает false

.indexOf()

Возвращает индекс первого входящего элемента в массив. Если элемент не найден, функция возвращает false.

['apple', 'lemon', 'banana'].indexOf('lemon'); //возвращает 1
['apple', 'lemon'].indexOf('banana'); //возвращает -1

.map()

Создает новый массив, полученный в резальтате вызова функции fn, переданной в качестве параметра.

var timesTwo = [1, 2, 3].map(function(item, index){
	return item * 2;
}); //timesTwo = [2, 4, 6];

.associate()

Создает массив, в котором пары ключ-значения основаны на текущем массиве и переданном параметром.

var animals = ['Cow', 'Pig', 'Dog', 'Cat'];
var sounds = ['Moo', 'Oink', 'Woof', 'Miao'];
sounds.associate(animals);
//возвращает {'Cow': 'Moo', 'Pig': 'Oink', 'Dog': 'Woof', 'Cat': 'Miao'}

.extend()

Дополняет исходный массив другим.

var animals = ['Cow', 'Pig', 'Dog'];
animals.extend(['Cat', 'Dog']);
//animals = ['Cow', 'Pig', 'Dog', 'Cat', 'Dog'];

.combine()

Объединяет два массива. При этом одинаковые элементы не дублируются.

var animals = ['Cow', 'Pig', 'Dog'];
animals.combine(['Cat', 'Dog']); //animals = ['Cow', 'Pig', 'Dog', 'Cat'];

.include()

Дополняет массив элементом.

['Cow', 'Pig', 'Dog'].include('Cat'); //возвращает ['Cow', 'Pig', 'Dog', 'Cat']
['Cow', 'Pig', 'Dog'].include('Dog'); //возвращает ['Cow', 'Pig', 'Dog']

.erase()

Удаляет переданный элемент из массива.

['Cow', 'Pig', 'Dog', 'Cat', 'Dog'].erase('Dog'); //возвращает ['Cow', 'Pig', 'Cat']
['Cow', 'Pig', 'Dog'].erase('Cat'); //возвращает ['Cow', 'Pig', 'Dog']

.flatten()

Превращает многомерный массив в одномерный.

var myArray = [1,2,3,[4,5, [6,7]], [[[8]]]];
var newArray = myArray.flatten(); //newArray = [1,2,3,4,5,6,7,8]

.empty()

Очищает массив.

var myArray = ['old', 'data'];
myArray.empty(); //myArray теперь равен []

Получение элемента массива

.getLast()

Возвращает последний элемент массива.

['Cow', 'Pig', 'Dog', 'Cat'].getLast(); //возвращает 'Cat'

.getRandom()

Возвращает случайный элемент массива.

['Cow', 'Pig', 'Dog', 'Cat'].getRandom(); //возвращает один из элементов

Работа с цветом RGB.

.hexToRgb()

Переводит шестнадцатиричное значение цвета в формат RGB.

['11','22','33'].hexToRgb(); //возвращает "rgb(17,34,51)"
['11','22','33'].hexToRgb(true); //возвращает [17, 34, 51]

.rgbToHex()

Возвращает шестнадцатиричное значение цвета в формате RGB.

[17,34,51].rgbToHex(); //возвращает "#112233"
[17,34,51].rgbToHex(true); //возвращает ['11','22','33']
[17,34,51,0].rgbToHex(); //возвращает "transparent"

Более подробное описание функций в официальной документации.

Понравилась статья? Подпишись на RSS.

Советую почитать:

Mootools. Ключевое слово this
Изучаем MooTools. Шаг 7 - AJAX

Теги: удалить элемент массива mootools

Изучаем MooTools. Шаг 2 - Селекторы Изучаем MooTools. Шаг 4 - События

Комментарии

  • another_i написал 10 ноября 2010 года

    Добрый день.
    Меня крайне интересует вопрос поведения .delay() внутри цикла... буду очень благодарен за любую помощь в этом вопросе.

    По сути вопрос заключается в следующем:
    необходимо, скажем, чтобы в цикле функция запускалась КАЖДУЮ итерацию с задержкой. Неудачная моя попытка реализации этого выглядит так:

    $('button').addEvent('click', function() {
     var a = [5, 10, 15, 20, 25];
     a.each( function(item, i) {
      var fn = function () {alert ('Прошло ' + item + ' секунд');};
        fn.delay(5000); 
     });
    });

    В этом случае задержка только перед первым alert'ом идет, остальные подряд вылетают.
    Спасибо.

    Ответить
  • Александр написал 10 ноября 2010 года

    Может вам нужен .periodical()?

    Ответить
  • another_i написал 10 ноября 2010 года

    Спасибо, попробую его, но у меня были сомнения некоторые на счет правильности использования данного метода в этом случае... по сути при запуске функции с «.periodical();» получается бесконечный цикл вызова этой функции через определенный интервал времени до тех пор, пока интервал не отчистится с помощью функции «clearInterval(timer);». Я прав ведь? Если да, то как в таком случае будет происходить основной обход массива, точнее будет ли задержка при каждом вызове функции? Или как «.periodical();» будет работать вкупе с циклическим обходом массива, например?

    Ответить
  • Александр написал 11 ноября 2010 года

    Все правильно. Если вам нужно считать секунды, попробуйте так:

    var counter = 0;
    var Fn = function(){ 
        counter += 2; 
        console.log(counter + ' сек');
        if (counter == 10) { clearInterval(timer); }
    }
    var timer = Fn.periodical(2000);

    Через 10 секунд цикл прекратится.

    Ответить