Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Фильтр таблицы. Как удалить элемент из массива? (https://javascript.ru/forum/misc/52243-filtr-tablicy-kak-udalit-ehlement-iz-massiva.html)

Vlasenko Fedor 12.12.2014 22:54

Цитата:

Сообщение от bes
если бы querySelectorAll возвращал обычный массив, то можно было бы сделать так
trs.map(function (tr) {

// мини j :-)
    function $(name, element) {
        var el = (element || document).querySelectorAll(name);
        return el ? (el.length > 1 ? Array.apply(null, el) : el[0]) : [];
    }

bes 12.12.2014 23:06

Цитата:

Сообщение от leshiple
bes, если я правильно понял статью, ссылку на которую вы мне дали, то Array.prototype можно заменить на []

что делай, то и хочешь :)
var arr = [1, 2, 3];
var arr1 = ["a", "b", "c"];
var mas = arr1.map.call(arr, function (el) { 
	return el;
});
alert(mas);

Vlasenko Fedor 12.12.2014 23:49

if (!Array.prototype.map) {
    Array.prototype.map = function (fn, scope) {
      var tmp = [];
      for (var i = 0, len = this.length; i < len; ++i) {
        tmp.push(fn.call(scope, this[i], i, this));
      }
      return tmp;
    }
  }
  var arr = [1, 2, 3];
  var arr1 = ["a", "b", "c"];
  var mas = arr1.map.call(arr, function (el) {
    return el;
  });
  alert(mas);

  var sas = arr.map(function (el) {
    return ++el;
  });

  alert(sas);
:dance:

leshiple 13.12.2014 09:35

bes, зачем здесь:
var mas = arr1.map.call(arr, function (el) {
    return el;
});

arr1?
Чем он "лучше" чем Array.prototype или []? Он же никак никак не влияет на выполнение функции и к нему внутри функции кроме как по имени не обратишься. Или я ошибаюсь?

Poznakomlus на developer.mozilla.org я прочитал что твоя первая конструкция в посте №23 это полифилл. Как я могу проверить работоспособность твоего кода (в каких случаях метод map будет отсутствовать)? Мне нужен старый браузер или в коде как-то объявить версию языка?

bes 13.12.2014 09:51

Цитата:

Сообщение от leshiple
bes, зачем здесь:
var mas = arr1.map.call(arr, function (el) {
    return el;
});

arr1?
Он же никак никак не влияет на выполнение функции и к нему внутри функции кроме как по имени не обратишься. Или я ошибаюсь?

ты сказал [] вместо Array.prototype, я показал, что любой массив вместо []

Цитата:

Сообщение от leshiple
Poznakomlus на developer.mozilla.org я прочитал что твоя первая конструкция в посте №23 это полифилл. Как я могу проверить работоспособность твоего кода (в каких случаях метод map будет отсутствовать)? Мне нужен старый браузер или в коде как-то объявить версию языка?

ie8 юзают геронтофилы, поэтому реализация такого полифила полезна только для общего развития
для проверки убери проверку на существование, метод map будет переопределён

leshiple 13.12.2014 10:14

Я думал что к этому массиву можно обратиться внутри функции через this

bes 13.12.2014 10:15

Цитата:

Сообщение от leshiple
Я думал что к этому массиву можно обратиться внутри функции через this

call поменял контекст, проверяется простейшими тестами как и всё остальное

leshiple 13.12.2014 10:59

Чтобы установить свой контекст нужно третьим аргументом у метода call установить необходимый объект.
Я хочу посредством этой конструкции сложить элементы двух массивов без цикла.

bes 13.12.2014 11:07

Цитата:

Сообщение от leshiple
Чтобы установить свой контекст нужно третьим аргументом у метода call установить необходимый объект.
Я хочу посредством этой конструкции сложить элементы двух массивов без цикла.

может у map, а не у call? нет, третий аргумент - это просто доступ к самому массиву, элементы из которого берутся

навскиду можно так
var arr1 = [1, 2, 3];
var arr2 = ["a", "b", "c"];
var result = arr1.map(function (val, index) {
	return val + arr2[index];
});
alert(result);

leshiple 13.12.2014 11:19

bes,
Да, у map. Проглядел. Спасибо.


Часовой пояс GMT +3, время: 08:18.