Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Заполнение многомерного массива

Помогите заполнить многомерный массив записав в него двойной цикл. Вот цикл:

Код

for(var i = 0; i<10; i++)
{
  for(var j = 0; j<10; j++)
  {
    
  }
}


После заполнения должно получится
Код

var arr=[[0,0],[0,1],[0,2],[0,3]...[9,9]]; 

Где первый элемент многомерного массива i, а второй j.

Это сообщение отредактировал(а) Alexey89 - 22.7.2016, 04:05
Ответ:
Помогите заполнить многомерный массив записав в него двойной цикл. Вот цикл:

Код

for(var i = 0; i<10; i++)
{
  for(var j = 0; j<10; j++)
  {
    
  }
}


После заполнения должно получится
Код

var arr=[[0,0],[0,1],[0,2],[0,3]...[9,9]]; 

Где первый элемент многомерного массива i, а второй j.

Это сообщение отредактировал(а) Alexey89 - 22.7.2016, 04:05
Вопрос: Проверка на соответствие ключа в многомерном массиве

Есть код:

arr - многомерный массив следующего вида : [ [], [], [] ];
В каждом подмассиве содержится ключ-значение, напрм. [ ['title':'hello', id: 3533], ['title' : 'data', 'id':5454], []... ];

Также есть массив обычный массив keys = ['title', 'id'], который должен проверять соответствие ключей в каждом массиве многомерного дружка.

var i=1, y=0, result; txt='';
			
var arr = ...
var keys = ..	
			
	for(i;i<arr.length;i++) {
					
			var cell = arr[i];
					
			     for(y;y<keys.length;y++) {
							
					alert(cell[keys[y]])
							
						}


Получилось придумать что-то такое, но замысел думаю понятен. В данном коде массив keys, сравнивает ключи только первого подмассива в массиве arr.
Ответ:
Сообщение от hoax
Нет там именно многомерный массив.
видимо вы сами не в курсе какая структура у вашего обьекта.
Вопрос: Преобразование многомерного массива в строку и обратно

Здравствуйте.
Возникла задача записи многомерных массивов в куки.
Для этого нужно преобразовывать массив в строку и наоборот.
Написал для этого мини-функции, прошу оценить и подсказать адекватен ли этот код:
//----Преобразование массива в строку --------------
	function arr_to_str(arr){
		var b = arr[0].join('=');
		for(var i = 1; i < arr.length; i++){
		    b += '-' + a[i].join('=');
		}
		return b;
	}
//------И сразу же можно проверить работу функции ---------
	var a = [
		[1, 2, 3],
		[4, 5, 6],
		[7, 8, 9]
	];
	alert(arr_to_str(a));
//----Преобразование строки в массив-----------------
	function str_to_arr(str){
		var str1 = str.split('-');
		var c = new Array();
		for(var i = 0; i < str1.length; i++){
		    c[i] = str1[i].split('=');
		}
		return c;
	}
//------И сразу же можно проверить работу функции ---------
       var g = "1=2=3-4=5=6-7=8=9";
      alert(str_to_arr(g));


Буду признателен за адекватные ответы
Ответ: Bond, спасибо. Немного переписал код и получилась универсальная функция.
var a = [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
	];
//Преобразуем массив в строку и обратно
var ret = ArrayParser(a)
alert(ret);
ret = ArrayParser(ret)
//массив разделён, чтобы было видно, что это массив
alert(ret[0]+ret[1]+ret[2]);//12,15,18

function ArrayParser(data){
	var x =",";
	var y =";\n";

	var str;
	var arr;
	if (typeof data === "string"){
		str = decodeURIComponent(data);
		str = str.split(y);
		var arr = new Array();
		for(var i = 0; i < str.length; i++){
			arr[i] = str[i].split(x);
		}
		return arr;

	}else{
		str = data[0].join(x);
		for(var i = 1; i < data.length; i++){
			str += y + data[i].join(x);
		}
		return (encodeURIComponent(str));
	}
}
Вопрос: При замене определенного элемента в многомерном массиве, заменяются в каждой строке.

Здравствуйте!

Новичок. Делаю карту для игры через многомерный массив, следующим образом:

class GameMap {
  constructor() {
      this.data = this.createMap();
      this.data[2][2] = 1; //****

			// 0 - empty
			// 1 - box
  }

	createMap() {
		var arr = [];
		for (let i=0; i<10; i++){
			arr.push(0);
		}
		var arr10x10 = [];
		for (let i=0; i<10; i++){
			arr10x10.push(arr);
		}
		return arr10x10;
	}

  save(){
  	localStorage.setItem('gamemap', JSON.stringify(this));
  }

  load(){
  	var gamemap = JSON.parse(localStorage.getItem('gamemap'));
  	this.data = gamemap.data;
  }

	show(){
		var map = document.getElementById('map');
		map.style.width = "500px";
		map.style.height = "500px";
		for (let i=0; i<this.data.length; i++){
			for (let y=0; y<this.data.length; y++){
				var cols = document.createElement('div');
				var rows = document.createElement('div');
				cols.className=`d-${this.data[i][y]}`;
				cols.style.width = "50px"
				cols.style.height = "50px"
        cols.style.border = "1px solid black"
        rows.style.border = "1px solid black"
				map.appendChild(cols);
				map.appendChild(rows);
			}
		}

	}
}


Проблема в следующей строке this.data[2][2] = 1; //**** Она не заменяет нужный элемент. 1 добавляется во втором элементе каждой строки: Не могу понять почему.
Помогите, пожалуйста
Ответ:
Сообщение от рони
RoyalHunt,
строка 11 массив создан только один раз для всех

либо берите копию
arr10x10.push(arr.slice(0));
, либо создавайте столько раз сколько нужно
перенести строки 11 - 14 в 17
Понял! Спасибо большое!

Вначале пробовал таким образом создать массив: let array = new Array(arraySize).fill(new Array(arraySize).fill(number));

Но та же ситуация получается...
Вопрос: как получить многомерный массив из этой строки

Подскажите как получить нормальный многомерный массив из этой строки
===>[{"id":"1","field_name":"1","xx":"4","yy":"4"},{"id ":"2","field_name":"1","xx":"5","yy":"5"},{"id":"3 ","field_name":"1","xx":"8","yy":"8"},{"id":"4","f ield_name":"1","xx":"19","yy":"4"}]<===(string)
Ответ: Ты хотел сказать массив объектов?
arr=eval(str).map(function(ob){return eval(ob)})
Вопрос: Обход многомерного массива с задержкой после каждого цикла

Здравствуйте

Уже несколько дней бьюсь над задачей обхода многомерного массива, с задержкой после каждого цикла.

Сделать обход простого массива с задержкой - получается. Сделать обход многомерного массива без задержки - получается. А вот объединить два подхода в одном - не получается.

Примеры:

Обход массива с задержкой 1с:

function go(scenario) {
        var i = 0,
            timer = setInterval(
                function() {
                    if (i < scenario.length) {
                        console.log('User: ' + scenario[i].user);
                        i++;
                    }
                    else{
                        clearInterval(timer);
                    }
                },
                1000
            );
    }

    var scenario = [
        {
            'user': 'user1'
        },
        {
            'user': 'user2'
        },
        {
            'user': 'user3'
        }

    ];

    window.onload=function(){
        go(scenario);
    }


Обход многомерного массива без задержки:

var a = [ // общий массив
        [ // массив stroke
            [ // массив этапов
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ]
        ],
        [ // массив stroke
            [ // массив этапов
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ],
            [
                {
                    'user_id': 1
                },
                {
                    'user_id': 2
                }
            ]
        ]
    ];

    function go(a) {
        i = 0;
        while (i < a.length) {
            j = 0;
            while (j < a[i].length) {
                n = 0;
                while (n < a[i][j].length) {
                    console.log('Ход: ' + i + ' Эпизод: ' + j + ' Объект: ' + n);
                    n++;
                }
                j++;
            }
            i++;
        }
    }
    go(a);


Есть понимание, что надо первый пример развить до трех вложенных функций с задержками, но у меня от вложенности такая каша получается, что и не работает, и не разобраться почему.

Буду признателен, если кто-то напишет готовый код.
Ответ: Спасибо, очень компактный код!
Вопрос: Получение значений из многомерного массива

С наступившим Новым годом, Форумчане

Есть многомерный массив пример снизу, как по запросу переменной $var (которая в зависимости от запроса равна ключу массива вида car1, car2, car3) получить все элементы этого ключа массива?

Массив
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var auto = {
        car2: {
            audi: {
                 name: 'Ауди',
             path: 'Карта Ауди'
                 },
        vw: {
                 name: 'Фольцваген',
             path: 'Карта Фольцваген'
                 }    
                 },
        
     car3: {
            bmw: {
                 name: 'BMW',
             path: 'Карта BMW'
                 },
        mb: {
                 name: 'Район Мерседес',
             path: 'Карта Мерседес'
                 }    
                 }   
              
};
Допустим пользователь кликнул по значению $var=car3, как получить все значения данного элемента.
Понял, что нужно перебрать массив, но вывести что-то не получается.
Ответ: Compaq, Я понимаю, что первое число года, но код, который вы сейчас показали, я бы не понял и в любое другое время К тому же, в этих двух строчках - несколько синтаксических ошибок.

Записи ниже равнозначны и выведут один и тот же результат:

Javascript
1
2
3
4
5
6
7
8
9
var obj = {
  key1: {
    key2: '2016'
  }
};
console.log(obj.key1.key2); // 2016
console.log(obj['key1']['key2']); // 2016
console.log(obj['key1'].key2); // 2016
console.log(obj.key1['key2']); // 2016
Добавлено через 1 минуту
Сообщение от Compaq
Еще раз с Наступившим!
И вас так же. Пора бы поспать
Вопрос: Подсчет элементов в многомерном массиве

Подскажите пожалуйста как посчитать элементы где есть двойки в многомерном массиве например есть массив
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [[0,2,0,0,0,2,0], 
         [0,2,0,0,2,2,2], 
        [0,2,0,0,2,2,2], 
        [2,2,2,0,2,2,2],
        [2,2,2,2,2,2,2], 
        [2,2,2,2,2,2,2], 
       [2,2,2,2,2,2,2],
       [2,2,2,0,2,2,2],
       [0,2,2,0,2,2,2],
       [0,0,0,0,2,2,2],
      [0,0,0,0,2,2,2],
      [0,0,0,0,2,2,2],
      [0,0,0,0,0,2,0]];
Нужно посчитать все двойки в каждой строчке и занести эти данные в массив, то же самое и в столбцах.
Должно получится

ActionScript 3
1
2
var countCol = [5,9,6,3,11,12,11];
var countRow = [2,4,4,6,7,7,7,6,5,3,3,3,1];
Ответ:
ActionScript 3
1
2
3
4
5
6
7
8
for (int i = 0; i < arr.length; i++){
    for (int j = 0; j < arr[0].length; j++){
        if (arr[i][j] == 2){
            countCol[i]++;
            countRow[j]++;
        }
    }
}
countCol, countRow проинициализируйте нулями в каждом элементе, размером в нужное количество колонок и столбцов соответственно
Вопрос: Разобрать многомерный массив и вывести

Добрый день.
Раньше все было просто
Код Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input_initial_value = $(this).val();
                    // производим AJAX запрос к get_city1.php, передаем ему GET query, в который мы помещаем наш запрос
                    $.get("get_city1.php", { "query":$(this).val() },function(data){
                        //php скрипт возвращает нам строку, ее надо распарсить в массив.
                        // возвращаемые данные: ['test','test 1','test 2','test 3']
                        var list = eval("("+data+")");
                        suggest_count = list.length;
                        if(suggest_count > 0){
                            // перед показом слоя подсказки, его обнуляем
                            $("#search_advice_wrapper").html("").show();
                            for(var i in list){
                                if(list[i] != ''){
                                    // добавляем слою позиции
                                    $('#search_advice_wrapper').append('<div class="advice_variant">'+list[i]+'</div>');
                                }
                            }
                        }
                    }, 'html');
                }
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(!empty($_GET['query'])){
    $query = (string)$_GET['query'];
    $array = array();
    
    $query = mysql_query("SELECT title_ru FROM _cities WHERE title_ru LIKE '".$query."%' order by title_ru LIMIT 20");
    
    while($row = mysql_fetch_array($query, MYSQL_ASSOC))
    {
        $array[] = $row['title_ru'];
    }
    
    
    
    
 
    echo "['".implode("','", $array)."']";
}
exit();
ввел название - получил в списке подходящие варианты.
Теперь стало сложнее

Появилась потребность выводить больше данных о записи. На форуме подсказали, что для начала нужно сформировать многомерный массив. Это мне удалось.
Код PHP
1
2
3
4
5
6
7
8
9
if(!empty($_GET['query'])){
    $query = (string)$_GET['query'];
    $array = array();
    
    $query = mysql_query("SELECT city_id, region_id, country_id, title_ru FROM _cities WHERE title_ru LIKE '".$query."%' order by title_ru LIMIT 20"); $arr = array();
while ( $row = mysql_fetch_array($query) ) $array[] = $row;
    echo "['".implode("','", $array)."']";
}
exit();
а вот как теперь вывести эти несколько полей (для начала хотя бы просто отобразить в формате "title_ru (region_id)")?
Прошу помощи!
Заранее спасибо.
Ответ:
Код Javascript
1
2
3
4
5
6
7
8
9
$.ajax({
  method: "POST",
  url: "some.php",
  dataType: "json"
  data: { some: "data" }
})
  .done(function( msg ) {
    console.log( msg , msg.myvar_1 , msg.myvar_2 );
  });
Код PHP
1
echo json_encode( [ 'myvar_1' => [ 1,2,3,4,5...n ] , 'myvar_2' => [ a,b,c,d... ] );
Вопрос: Преобразовать таблицу в многомерный массив

Здравствуйте, помогите пожалуйста.
Имеется таблица, в которой можно менять количество строк и столбцов. в каждой ячейке таблице имеется текстовая форма. Нужен скрипт, который
из этой таблице получает,многомерный массив.
$(".um_matr").click(function(){
				var tr = $("#A_matr").find("tr");
                    for(var i=0;i<tr.length;i++)
                    {
                        var td = tr.eq(i).find("td");
                        A_Table[i] = new Array()
                        for(var j=0;j<td.length;j++)
                        {
                            A_Table[i][j] = td.eq(j).find("input").val();
                            
                            //alert(td.eq(j).find("input").val());
                        }
						
                    } 
					alert(A_Table)
				})

но почему то возвращает одномерный массив(
Ответ:
Сообщение от Liza_rub
результат, например [[1,2],[3,4],[5,6],[7,8]]
Зачем же его формировать, а не именовать поля надлежащим образом и отправить формой, думаю что в итоге это же для сервера готовится?