Стандарт Ecmascript5 был выпущен 3 декабря 2009 года, и он приносит несколько новых способов улучшить существующие операции массива. Тем не менее, эти новые методы массива не стали популярными, потому что в то время на рынке не хватало браузеров с поддержкой ES5.
Массив "дополнения"
Никто не сомневается в практичности этих методов, но написание полифилла (PS: плагин, совместимый со старыми браузерами), не стоит для них. Он превращается в «должен реализовать» в «лучшую реализацию». Некоторые люди на самом деле называют эти методы массива массивом «дополнениями». Почему!
Но времена меняются. Если вы посмотрите на популярные проекты JS с открытым исходным кодом на GitHub, вы увидите, что эта тенденция меняется. Каждый хочет сократить много зависимостей (сторонних библиотек) и реализовать их только с локальным кодом.
Хорошо, давайте начнем.
Мои 5 массивов
В ES5 есть 9 методов массива в общем http://kangax.github.io/compat-table/es5/
Примечание* Девять методов
Array.prototype.indexof
Array.prototype.lastindexof
Array.prototype.every
Array.prototype.some
Array.prototype.foreach
Array.prototype.map
Array.prototype.filter
Array.Prototype.Reduce
Array.prototype.reduceright
Я выберу 5 методов, которые я лично считаю наиболее полезными, и многие разработчики встретятся.
1) Индекс
Метод Indexof () возвращает положение первого элемента, найденного в массиве, и -1, если его не существует.
Когда индекс не используется
var arr = ['Apple', 'Orange', 'pear'], sucd = false; for (var i = 0, l = arr.length; i <l; i ++) {if (arr [i] === 'Orange') {sud = true;}} console.log ("найдено:", найдено);После использования
var arr = ['Apple', 'Orange', 'pear']; console.log ("найдено:", arr.indexof ("Orange")! = -1);2) Фильтр
Метод Filter () создает новый массив, соответствующий критериям фильтра.
Когда Filter () не используется
var arr = [{"name": "Apple", "count": 2}, {"name": "Orange", "count": 5}, {"name": "pear", "count": 3}, {"name": "Orange", "count": 16},]; var newarr = []; for (var i = 0, l = arr.length; i <l; i ++) {if (arr [i] .name === "Orange") {newarr.push (arr [i]);}} console.log ("filter ressuls:", newarr);Используйте Filter ():
var arr = [{"name": "Apple", "count": 2}, {"name": "Orange", "count": 5}, {"name": "pear", "count": 3}, {"name": "Orange", "count": 16},]; var newarr = arr.filter (function (item) {return item.name === "Orange";}); console.log ("Результаты фильтра:", newarr);3) Foreach ()
Foreach выполняет соответствующий метод для каждого элемента
var arr = [1,2,3,4,5,6,7,8]; // использует обычные «для« петли до итатерации (var i = 0, l = arr.length; i <l; i ++) {console.log (arr [i]);} console.log ("============================================ iteratearr.foreach (function (item, index) {console.log (item);});Foreach используется для замены цикла
4) MAP ()
После того, как Map () выполняет определенную операцию (MAP) на каждом элементе массива, будет возвращен новый массив.
Не используйте карту
var oldarr = [{first_name: "colin", last_name: "toh"}, {first_name: "addy", last_name: "osmani"}, {first_name: "yehuda", last_name: "katz"}]; function getNewarr () {var newarr = []; for (var i = 0, l = uldarr.length; i <l; i ++) {var item = oldarr [i]; item.full_name = [item.first_name, item.last_name] .join ("); newarr [i] = item;} return newarr;} console.log (getNewarr ());После использования карты
var oldarr = [{first_name: "colin", last_name: "toh"}, {first_name: "addy", last_name: "osmani"}, {first_name: "yehuda", last_name: "katz"}]; function getNewarr () {return uldarr.map (function (item, index) {item.full_name = [item.first_name, item.last_name] .join (""); return item;}); } console.log (getNewarr ());Map () является очень практичной функцией при обработке данных, возвращаемых сервером.
5) уменьшить ()
Cream () может реализовать функцию аккумулятора, уменьшая каждое значение массива (слева направо) до значения.
Честно говоря, было немного трудно понять это предложение в начале, это было слишком абстрактно.
Сценарий: Статистика, сколько неповторимых слов в массиве
Когда не используется уменьшить
var arr = ["Apple", "Orange", "Apple", "Orange", "Pear", "Orange"]; function getWordCnt () {var obj = {}; for (var i = 0, l = arr.length; i <l; i ++) {var item = arr [i]; obj [item] = (obj [item] +1) || 1; } return obj;} console.log (getWordCnt ());После использования Cread ()
var arr = ["Apple", "Orange", "Apple", "Orange", "Pear", "Orange"]; function getWordCnt () {return arr.reduce (function (prev, next) {prev [next] = (prev next] + 1) || 1; return prev;}, {});} console.log (get sword ());Позвольте мне в первую очередь объяснить мое собственное понимание уменьшения. Уменьшение (обратный вызов, начальный завод) пройдет в двух переменных. Функция обратного вызова (обратный вызов) и начальный зал. Предположим, что функция имеет входящий параметр, Prev и Next, индекс и массив. Вы должны понимать Prev и Next.
Вообще говоря, PREV начинается с первого элемента в массиве, а затем - второй элемент. Но когда вы проходите в начальном значении (начальное значение), первая предвидец будет начальным, а затем будет первым элементом в массиве.
например:
/** Разница между этими двумя, запустите его в консоли, и вы узнаете*/var arr = ["Apple", "Orange"]; function nopassValue () {return arr.reduce (function (prev, next) {console.log ("prev:", prev); console.log ("next: next); return prev +" + strea arr.reduce (function (prev, next) {console.log ("prev:", prev); console.log ("Next:", Next); prev [next] = 1; return prev;}, {});} console.log ("Нет дополнительного параметра:", nopassvalue (); ansole.log ("--------------- Параметр: ", PassValue ());