Задачи по 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, время: 19:57. |