2013-11-15 3 views
12

Есть ли простой способ создать массив пустых строк в javascript? В настоящее время единственный способ, которым я могу думать, чтобы сделать это с помощью цикла:Создание массива пустых строк?

var empty = new Array(someLength); 
for(var i=0;i<empty.length;i++){ 
    empty[i] = ''; 
} 

но мне интересно, если есть способ сделать это в одну строку, либо регулярным Javascript или CoffeeScript.

ответ

37

Обновление: в новых браузерах - используйте .fill: Array(1000).fill('') создаст массив из 1000 пустых строк.


Да, есть способ:

var n = 1000; 
Array(n).join(".").split("."); // now contains n empty strings. 

Я бы, вероятно, использовать петлю, хотя, он передает намерение понятнее.

function repeat(num,whatTo){ 
    var arr = []; 
    for(var i=0;i<num;i++){ 
     arr.push(whatTo); 
    } 
    return arr; 
} 

Таким образом, совершенно ясно, что делается, и вы можете его повторно использовать.

+3

+1 для умения и для обозначения того, что использование цикла делает цель четкой. –

+1

Это замечательная идея :-) Эта вторая функция выглядит знакомой ;-) – qwertynl

+3

* (Тихо ждет, чтобы кто-то подобрал по одному смещению индекса) * –

1

Вы могли сделать функцию из нее:

function stringArray(length) { 
    var arr = []; 
    for(var i = 0; i < length; ++i) { arr.push(''); } 
    return arr; 
} 
0

Вы могли бы сделать что-то вроде этого:

var someLength = 10; 
var empty = Array.apply(0, Array(someLength)).map(function(){return '';}); 
// result: ["", "", "", "", "", "", "", "", "", ""] 
+2

Если кто-то задается вопросом, как это работает http: //stackoverflow.com/questions/18947892/creating-range-in-javascript-strange-syntax :) –

0

Просто для удовольствия

var empty = Array.apply(null, new Array(someLength)).map(String.prototype.valueOf,""); 
+0

+1 для умного трюка с 'valueOf'. Боковое примечание - здесь избыточно. –

+0

Немного короче: 'String (Array ([length])).split (','). map (String.prototype.valueOf, '') ' – KooiInc

+0

Что такое downvotes? Просто любопытно, так как это работает. – epascarello

0

Легче всего сделать в CoffeeScript, чтобы использовать loop comprehension:

a = ('' for i in [0 ... someLength]) # Note: 3 dots 
a = ('' for i in [1 .. someLength]) # Or 2 dots and start at 1 
#... 

Демо: http://jsfiddle.net/ambiguous/b9Vj9/

+0

Сохраните три символа с некоторыми играми в гольф ;-) '[1..5] .map (-> '')' – joeytwiddle

8

здесь более простой способ использования общих Протос на массив и строки:

"".split.call(Array(1001), ",") 

EDIT: Там теперь даже простые способы, некоторые из которых являются читаемыми:

Array(1000).fill(""); 

" ".repeat(999).split(" "); 
+0

(Производит 1001 пустые строки.) – joeytwiddle

0

Несмотря на то, что он не является широко доступным, браузеры начинают поддерживать систему EcmaScript 6 array co mprehensions, вы будете в состоянии сделать что-то вдоль линий:

var n = 1000; 
var empty_strs = ['' for (x of new Array(n))] 
+1

Они больше не являются частью ECMAScript 6. (Рассматривается для ES7) –

+0

@BenjaminGruenbaum вздох ... действительно? Основное разочарование = ( – rdodev

+0

Не рассматривается для ES9 либо в этот момент –

0

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

var n = Массив (размер). Заполнить ("");

+0

Добро пожаловать в StackOverflow: если вы отправляете код, XML или образцы данных, выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ({}) на панель инструментов редактора или с помощью Ctrl + K на клавиатуре для удобного форматирования и синтаксиса выделите это! – WhatsThePoint

+0

Что добавляет этот ответ, который еще не был лучше выражен в принятом ответе? – Mogsdad

Смежные вопросы