Задачи по JavaScript
Реализуйте алгоритм, проверяющий если элемент матрицы MxN равен 0, тогда всем элементам данной строки и колонки присвоить 0.
var arr = [[1,2,3,4], [5,0,7,8], [8,9,10,11]]; моё решение: var arr = [[1,2,3,4], [5,0,7,8], [8,9,10,11]]; var vertical = 0; var gorizont = 0; //Циклы в которых мы находим 0 по вертикале и горизонтали for (var i = 0; i < arr.length; ++i) { for (var j = 0; j < arr[i].length; ++j) { if(arr[i][j] == 0) { vertical = j; gorizont = i; } } } for (var g = 0; g < arr[gorizont].length; ++g) { arr[gorizont][g] = 0; } for (var v = 0; v < arr.length; ++v) { for (var v2 = 0; v2 < arr[v].length; ++v2) { arr[v][vertical] = 0; } } alert ('Ноль найден в строке: ' + gorizont + "\nв индексе: " + vertical); for (var key in arr) { document.write(arr[key] + '<br>'); } ПЫ.СЫ. опыта у меня мало, возможно его можно как-то оптимизировать, жду ваших предложений, спасибо за внимание :victory: |
<script type="text/javascript"> var arr = [[1,2,3,4,5], [5,0,7,8,0], [5,6,7,8,1], [8,9,9,9,12]]; function Replacer(i,j) { for(var J in arr[i]){ arr[i][J]=0; } for(var I in arr){ arr[I][j]=0; } } TST_arr0=[]; for(var i in arr){ for(var j in arr[i]){ if(arr[i][j]==0){ TST_arr0.push([i,j]); } } } for(var i in TST_arr0){ Replacer(TST_arr0[i][0],TST_arr0[i][1]) } </script> <script> // Print var str='' for(var i in arr){ str+='['+arr[i].join(",")+']\n' } alert(str); </script> |
спасибо!;)
|
не совсем в тему, но как создать циклами массив массивов?
|
daima,
var mas = []; for (i=0; i < 10; i++) { mas[i] = []; for (j=0; j < 10; j++) { mas[i][j] = j; } } alert(mas); |
а сразу : mas[0][0] = 10; ?
а если там будут не значения, а хеши, т.е mas=[[{qq:1,ww:2},...? |
daima,
mass=[];mass.push([10]); alert(mass[0][0]); |
Супер, спасибо, буду знать. а с хешами как?
|
Ребята! подскажите пожалуйста как извлечь уникальные значения из массива:
var array = [1,2,3,4,1,2,6,7]; заранее спасибо! |
берм 1е значение и снова пробегаемся по массиву если нету - выводим и т.д.
|
да, но не работает должным образом (((
var newStr = ''; var array = [1,2,3,4,1,2,6,7]; for (var i in array) { for (var j in array) { if (array[i] != array[j]) { newStr += array[i]; } } } alert(newStr); решил с помощью array_unique() |
wawandas,
люблю тех кто учиться и не хамит + тебе (это я такой добрый после общения с троллями:) ) держи бро: var mass1 = [1, 2, 3, 2, 4, 5, 6, 7, 8]; var mass2 = [45,1, 3, 3, 1, 12, 12, 45]; function prov(mass){ for (var i = 0; i < mass.length; i++){ for (var j = i; j < mass.length; j++){ if (i != j){ if (mass[i] == mass[j]){ alert("Нумерация с нуля - mass[" + i + "] == mass[" + j + "]\n" + mass[i] + " == " + mass[j]); } } } } } prov(mass1); prov(mass2); |
Цитата:
var newStr = ''; var array = [1,1,3,4,1,1,6,7]; var str = array.join(","); var Sin=str; function Replacer(str, p1, offset, s) { var reg = '/'+p1+',?/g'; var reg2 = '/'+p1+',?/'; var s2; var s2=Sin.replace(eval(reg2),''); var s3=s2.replace(eval(reg),'') if(s3!=s2)Sin=s3; return p1 +','; } str = str.replace(/(\d*?),/g,Replacer).replace(/^.*?$/g,Sin).split(","); alert(str); |
Deff,
:blink: :blink: |
Dim@,
взаимно ;) |
Deff,
было бы здорово если бы 1цу тоже выводило :-? , всем спасибо за труды и внимание! |
wawandas,
Ващет мой кривой код, посколь расчитан на 1 цифру в любом числе, Единицу не выводит - она у меня повторяецо - см.исходный массив Вродь Поправил <script type="text/javascript"> var newStr = ''; var array = [111,1,111,2,33,3,44,5,33,44,6,77,77]; var str = array.join(",")+","; var Sin=str; function Replacer(str, p1, offset, s) { var reg = '/'+p1+',?/g'; var reg2 = '/'+p1+',?/'; var s2; var s2=Sin.replace(eval(reg2),''); var s3=s2.replace(eval(reg),'') if(s3!=s2)Sin=s3; return p1 +','; } str = str.replace(/(\d*?),/g,Replacer).replace(/^.*?$/g,Sin); str=str.substring(0,str.length-1).split(","); alert(str); </script> |
var arr = [1,2,3,4,1,2,6,7]; var tmp_arr = new Array(); for (i = 0; i < arr.length; i++) { if (tmp_arr.indexOf(arr[i]) == "-1") { tmp_arr.push(arr[i]); } } alert(tmp_arr); |
wawandas,
[JS run]Тут код[/JS] |
спасибо!
|
wawandas, последний цикл лишний
var arr = [1,2,3,4,1,2,6,7]; var tmp_arr = new Array(); var view = ''; for (i = 0; i < arr.length; i++) { if (tmp_arr.indexOf(arr[i]) == "-1") { tmp_arr.push(arr[i]); } } /*for(var i in tmp_arr) { view += tmp_arr[i] + ','; } alert(view)*/ alert(tmp_arr); |
var newStr = ''; var arr = [111,1,111,2,33,3,44,5,33,44,6,77,77]; var Obj={}; for(i in arr){ Obj[arr[i]]=true; } var arrOut=[] for(key in Obj){ arrOut.push(key); } alert(arrOut) |
Цитата:
|
daima,
Присваиваем в объекте названиям свойств(или хешей) = значения элементов массива, если имена свойств совпадают - то считаецо: что присваиваецо значение true одному и тому же свойству- а колво свойств объекта будет равно неповторяющимся именам(бывшим значениям массива) |
Люди добыре! помогите понять почему...
Задача вставить элемент span с текстом "Price:" перед элементом span c классом "inner_block". код... <div class = "inner_block"> <span class="item_title">Boots</span> <span>$150.00</span> <a href="#">Add To Backet</a> <span>Price:</span> </div> var elem = document.querySelector("div.inner_block"); var elemSpan = document.querySelector("span.item_title"); var lastElem = elem.lastElementChild; function insertAfter(parent, node, referenceNode) { parent.insertBefore(node, referenceNode.nextSibling); } insertAfter(elem, lastElem, elemSpan); js вставляет туда куда нужно, но пропадает пробел ((( до: Boots $150.00 Add To Backet Price: после: BootsPrice: $150.00 Add To Backet почему так может получаться? p.s. после выполнения скрипта в firebag видно что тег span стоит как задуманно |
<span> Price:</span>
<div class = "inner_block"> <span class="item_title">Boots</span> <span>$150.00</span> <a href="#">Add To Backet</a> <span> Price:</span> </div> <script type="text/javascript"> var elem = document.querySelector("div.inner_block"); var elemSpan = document.querySelector("span.item_title"); var lastElem = elem.lastElementChild; function insertAfter(parent, node, referenceNode) { parent.insertBefore(node, referenceNode.nextSibling); } insertAfter(elem, lastElem, elemSpan); </script> |
да, но эт не выход если у меня таких span>price еще 3 штуки ((
всё же хотелось бы понять почему так происходит :( |
Господа,
как реализовать алгоритм который будет проверять является ли строка ротацией другой строки, пример: 'panama' являеться ротацией 'amapan' я так понимаю что здесь нужно использовать регулярки, поправте меня если я ошибаюсь. |
Цитата:
|
<script type="text/javascript"> str1='panama' str2='amapan' function TstСircular_movement(S1,S2) { var lenS1=S1.length,lenS2=S2.length; if(lenS1==lenS2){ var s1=S1.split(''); for(i in s1){ alert(s1.join('')) if(S2==s1.join(''))return i; s1.unshift(s1.pop()) } } return -1; } alert(TstСircular_movement(str1,str2)) //Возвращаем сдвиг или -1 </script> |
Deff, спасибо вам! отличная пища для ума!:victory:
|
Цитата:
|
еще вариант
var text = '12345'; var i = text.length; var len = i - 1; var line = text; while( i-- ) { line = line.slice( -1 ) + line.slice( 0, len ); alert( line ) ; } |
nerv_,
![]() Там я продинамил второй Вариант - кады сдвиг против часовой |
Deff,
nerv_, громадное спасибище за внимание и старания! |
Цитата:
function TstСircular_movement(s1, s2) { if (s1.length!=s2.length) return -1; else return (s1+s1).indexOf(s2); } //тесты alert(TstСircular_movement("panama", "amapan")); alert(TstСircular_movement("panama", "panama")); alert(TstСircular_movement("panama", "amapana")); |
oneguy, +
Классная идея!!! |
Deff,
спасибо! Учитывать отрицательные сдвиги не имеет смысла, так как они эквивалентны положительным сдвигам величиной n-i, где n - длина строки, а i - величина отрицательного сдвига. |
oneguy,
спасибо! удивляюсь тому, сколько может быть решений у одной задачи :blink: |
Цитата:
я сообразил (- затёр |
Часовой пояс GMT +3, время: 12:33. |