[]
- массив. Этот массив не используется вообще.
Он помещается на страницу, потому что использование массива дает вам доступ к прототипам массива, например .forEach
.
Это происходит быстрее, чем набирать Array.prototype.forEach.call(...);
Далее forEach
- это функция, которая принимает функцию как вход ...
[1,2,3].forEach(function (num) { console.log(num); });
... и для каждого элемента из this
(где this
например, length
, и вы можете получить доступ к его частям, например this[1]
), он будет передавать три вещи:
2
) Наконец, .call
является прототипом, функции которого имеют (это функция, вызываемая другими функциями). .call
примет свой первый аргумент и заменит this
внутри регулярной функции тем, что вы передали call
, поскольку первый аргумент (undefined
или null
будет использовать window
в повседневной JS или будет независимо от того, что вы прошли, если в «строгом режиме»). Остальные аргументы будут переданы исходной функции.
[1, 2, 3].forEach.call(["a", "b", "c"], function (item, i, arr) {
console.log(i + ": " + item);
});
// 0: "a"
// 1: "b"
// 2: "c"
Поэтому вы создаете быстрый способ вызова функции forEach
, и вы меняете this
из пустого массива на список всех тегов <a>
и
Ниже приведена ссылка на статью. что мы отказываемся от попыток функционального программирования и каждый раз придерживаемся ручного, встроенного цикла, потому что это решение хакерское и неприглядное.
Я бы сказал, что, хотя .forEach
менее полезен, чем его коллеги, .map(transformer)
, .filter(predicate)
, .reduce(combiner, initialValue)
, он по-прежнему служит целям, когда все, что вы действительно хотите сделать, это изменить внешний (не массив), n-раз, имея доступ к arr[i]
или i
.
Итак, как мы имеем дело с несоответствием, поскольку Девиз явно талантливый и знающий парень, и я хотел бы представить, что я знаю, что я делаю / куда я иду (время от времени ... ... иногда это начальное обучение)?
Ответ на самом деле довольно просто, и что-то вроде дяди Боба и сэра Крокфорда было бы как facepalm из-за недосмотра:
очистить его .
function toArray (arrLike) { // or asArray(), or array(), or *whatever*
return [].slice.call(arrLike);
}
var checked = toArray(checkboxes).filter(isChecked);
checked.forEach(listValues);
Теперь, если вы задаетесь вопросом, нужно ли вам это делать самому, ответ, возможно, не будет ... Это то, что делает ... ... каждая (?) библиотека с функциями более высокого порядка в наши дни. Если вы используете lodash или подчеркивание или даже jQuery, все они собираются взять набор элементов и выполнить действие n раз. Если вы не используете такую вещь, то обязательно напишите свой.
lib.array = (arrLike, start, end) => [].slice.call(arrLike, start, end);
lib.extend = function (subject) {
var others = lib.array(arguments, 1);
return others.reduce(appendKeys, subject);
};
Не только slice( )
/ array( )
/ и т. д., чтобы облегчить жизнь людям, которые хотят использовать списки, так же, как они используют массивы (как и должны), но для людей, у которых есть роскошь работы в браузерах ES6 + относительно близких будущее или «трансбинирование» в Вавилоне сегодня, у вас есть встроенные языковые функции, которые делают ненужным этот тип вещей.
function countArgs (...allArgs) {
return allArgs.length;
}
function logArgs (...allArgs) {
return allArgs.forEach(arg => console.log(arg));
}
function extend (subject, ...others) { /* return ... */ }
var nodeArray = [ ...nodeList1, ...nodeList2 ];
Супер-чистый и очень полезный. Найдите операторы Rest и Spread ; попробуйте их на сайте BabelJS; если ваш технический стек в порядке, используйте их в производстве с Babel и шаг сборки.
Нет никакой веской причины, чтобы не использовать преобразование из не-массива в массив ... ... просто не делайте беспорядок своего кода, ничего не делая , но вставляя ту же уродливую линию, везде.
Вы можете использовать метод mget
для получения значений нескольких ключей за один вызов (возвращаемых в том же порядке, что и ключи):
data = r.mget(['123', '456'])
Для поиска ключей по определенному шаблону, используйте метод scan
:
cursor, keys = r.scan(match='123*')
data = r.mget(keys)
(Документация: https://redis-py.readthedocs.io/en/latest/ )