Функциональный подход к построению базовых массивов
395 просмотра
5 ответа
Это мой код, действующий на myArray
:
var myArray = [];
var i;
for(i = 0; i < 20; i += 1) {
myArray.push(Math.random());
}
Есть ли функциональный эквивалент вышеупомянутого, который обходится без фиктивной переменной i
?
Любимые ответы :
while(myArray.push(Math.random()) < 20);
$.map(Array(20), Math.random);
for(var myArray = []; myArray.push(Math.random()) < 20;);
Ответы (5)
4 плюса
Не в ES5, нет реального функционального эквивалента этому, так как вам нужно что-то, что имеет сумму 20, чтобы применить карту к ...
var my20ElementArray = [0,1,2,3,4,5,6,7,8,9,10];
var myArray = my20ElementArray.map(Math.random);
Вы можете создать функцию, подобную xrange, которая есть в Python, но это просто скрыло бы эту «неиспользуемую» переменную внутри функции.
Автор: Aadaam Размещён: 04.08.2012 12:503 плюса
С помощью JavaScript 1.7 вы можете использовать массивы для этой задачи:
var myArray = [Math.random() for each (i in range(0, 20))];
Однако в ES5.1 вы можете просто использовать Array
конструктор для генерации массива произвольной длины, а затем отобразить его на случайные числа. Единственным недостатком является то, что map()
он не работает с неинициализированными значениями, поэтому я сначала генерирую массив пустых строк, используя join
и split
:
var myArray = new Array(20).join(" ").split(" ").map(Math.random);
Уродливый, но короткий. Возможно, лучшая (но менее понятная) идея из создания диапазона в JavaScript - странный синтаксис :
var myArray = Array.apply(null, {length: 20}).map(Math.random);
Начиная с комментария @FelixKlings, можно также использовать этот однострочный без i
переменной цикла:
for (var myArray=[]; myArray.push(Math.random()) < 20;);
// much better:
for (var myArray=[]; myArray.length < 20;) myArray.push(Math.random());
Автор: Bergi
Размещён: 04.08.2012 12:59
1 плюс
Вы ищете что-то следующее:
function makeArray(length, def) {
var array = [];
var funct = typeof def === "function";
while (array.push(funct ? def() : def) < length);
return array;
}
Затем вы можете создать массивы следующим образом:
var array = makeArray(100); // an array of 100 elements
var zero = makeArray(5, 0); // an array of 5 `0`s
В вашем случае вы можете сделать что-то вроде:
var myArray = makeArray(20, Math.random);
Смотрите следующую скрипку: http://jsfiddle.net/WxtkF/3/
Автор: Aadit M Shah Размещён: 04.08.2012 12:581 плюс
как насчет этого?
Это стиль Functionale, и он очень лаконичен.
var makeRandomArray = function(n){
if (n == 0) return [];
return [Math.random()].concat(makeRandomArray(n-1));
};
console.log(makeRandomArray(20))
Автор: blueiur Размещён: 05.08.2012 11:230 плюса
Вы можете попробовать:
var myArray = String(Array(20)).split(',')
.map( () => Math.random() );
Или дополните прототип Array чем-то вроде:
Array.prototype.vector = function(n,fn){
fn = fn || function(){return '0';};
while (n--){
this.push(fn());
}
return this;
}
// usage
var myArray = [].vector(20, () => Math.random());
Или попробуйте что-нибудь смешное:
var myArray = function a(n,fn){
return n ? a(n-1,fn).concat(fn()) : [];
}(20, () => Math.random())
Или используйте Array.from (ES> = 2015)
Array.from({length: 20}).map(() => Math.random())
Автор: KooiInc
Размещён: 04.08.2012 01:11
Вопросы из категории :
- javascript Как определить, какой из указанных шрифтов был использован на веб-странице?
- javascript Валидация клиентской стороны ASP.Net
- javascript Длина объекта JavaScript
- javascript Получение текста из выпадающего списка
- javascript Скрипт входа со скрытыми кнопками
- javascript Как автоматически изменить размер текстовой области с помощью Prototype?
- javascript Удаление элементов с помощью Array.map в JavaScript
- javascript Прокрутка переполненных DIV с помощью JavaScript
- javascript API Карт Google - проблемы с классом GLatLngBounds
- javascript Проверка десятичных чисел в JavaScript - IsNumeric ()
- functional-programming В чем разница между процедурным программированием и функциональным программированием?
- functional-programming Что такое хвостовая рекурсия?
- functional-programming Что такое «Currying»?
- functional-programming Почему функциональные языки?
- functional-programming Что такое «закрытие»?
- functional-programming Что такое монада?
- functional-programming What is referential transparency?
- functional-programming В чем разница между «закрытием» и «лямбдой»?
- functional-programming Почему ленивая оценка полезна?