Заполнение массива
Можно ли заполнить массив из N элементов одним значением, не обращать к каждому элементу в отдельности?
|
нельзя заполнять элементы не обращаясь к ним
|
Цитата:
alert(Array(10).join('foo|')); |
Цитата:
|
Цитата:
|
Цитата:
|
alert(Array(10).join('foo|').split('|')); monolithed, наверно ты это имел в виду. |
Цитата:
alert(Array(10).join(0).split('')); Доп. FINoM, конечно, просто я не дописал в надежде, что суть понятна) |
быстродействие скорей, масив двумерный, довольно большой и очищается полностью "=false" 40 раз в в секунду...
|
Цитата:
п.с. ребята, я же говорил))) он быстродействие имел ввиду) я как всегда умница) var q = 200 пробегись по массиву и присвой каждой его ячейке q и потом если ты изменишь q то изменятся все ячейки массива. или если у тебя в них хранятся разные значения, а потом они все должны очищаться,то проще удали массив, и пересоздай пустым. |
Array.prototype.assign = function(value,a,b,c,d){ //value - значение, на которое нужно изменить элементы //a - начальный элемент по оси x, c - конечный элемент по оси x //b - начальный элемент по оси y, d - конченый элемент по оси y try{ var self = this[b]; var func = arguments.callee; var before = self.slice(0,a); var after = self.slice(c,self.length-1); var arr = new Array(c-a+1); arr = arr.join(value+"[|]").split("[|]"); arr[arr.length-1] = value; this[b] = before.concat(arr).concat(after); if(b===d) return this; else{ b++; return func.apply(this,arguments); } }catch(e){ if(e){ throw{ array: this, message: e.message }; } } } |
slagemer1,
а что на входе что на выходе можно пример? |
Цитата:
|
Вот более улучшенная функция, она подходит как для заполнения матричного массива, так и линейного:
Array.prototype.assign = function func(form){ var self; form.type = form.type || "matrix"; var map=function(a,i,e){ if(i>=form.ax && i<=form.bx && (!form.drop || (i-form.ax+1)%form.drop!==0)){ if(form.callback) return form.callback(a,i,e); else return form.value; }else return a; } if(form.type==="inline"){ self = this; func.arr = self.map(map); self.splice(0,self.length); self.push.apply(self,func.arr); return self; }else if(form.type==="matrix"){ self = this[form.ay]; func.arr = self.map(map); this[form.ay] = func.arr; if(form.ay===form.by) return this; else{ form.ay++; return func.apply(this,arguments); } } } //value - присваиваемое значение //callback - возвращаемая функция для каждого подходящего под случай элемента массива //ax - начальный индекс по X, bx - конченый индекс по X //ay - начальный индекс по Y, by - конченый индекс по Y //drop - не присваивать каждому значению, индекс которого равен drop (начало от ax), значение value //type - тип массива (inline - линейный, matrix - матричный) по умол. матрчный var arr = [0,0,0,0,0,0,0,0,0,0,0]; arr.assign({value: 1, ax:1, bx:7, drop: 2, type: 'inline'}); //[0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0] function rename(a,i){ return i+': Full'; } var arr = ['Empty','Empty','Empty','Empty','Empty','Empty']; arr.assign({callback: rename, ax: 0, bx: 4, drop: 2, type: 'inline'}); //["0: Full", "Empty", "2: Full", "Empty", "4: Full", "Empty"] var arr = [[0,0,0],[0,0,0],[0,0,0]]; arr.assign({value: 1, ax: 0, ay: 0, bx: 1, by: 1, type: 'matrix'}); //[Array[3]->[1,1,0],Array[3]->[1,1,0],Array[3]->[0,0,0]] var arr = [[0,0,0],[0,0,0],[0,0,0]]; arr.assign({value: 1, ax: 0, ay: 0, bx: 2, by: 2, drop: 3, type: 'matrix'}); /* |1 1 1| |1 1 1| |0 0 0| */ |
Цитата:
|
Ну так а в чем проблема изменить на function func(){...} ? Переделал пример данным образом - пожалуйста
P.S. у меня с "use strict" запускается |
Часовой пояс GMT +3, время: 02:41. |