Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   2-х мерный массив из объектов (https://javascript.ru/forum/misc/86254-2-kh-mernyjj-massiv-iz-obektov.html)

REAB 10.01.2025 12:36

2-х мерный массив из объектов
 
Здравствуйте!

Пытаюсь сделать сабж, но код вообще зависает)
Или есть другой способ сделать 2-х мерный массив из Object'ов?

function CreateMatrix2D(Width, Height) 
{
    var MX = [];
 	
    while (Height--) 
	{
		var A = new Array();

		for (var x = 0; x < Width; ++x) 
		{
			var ID   = new Object();
			ID.Value = 0;
		
			A.push(ID);
		}

        MX.push(A);
    }
	
    return MX;
}

рони 10.01.2025 16:01

Цитата:

Сообщение от REAB
но код вообще зависает

вы что-то не договариваете ...
Цитата:

Сообщение от REAB
Или есть другой способ

function CreateMatrix2D(Width, Height) {
            return new Array(Height).fill(new Array(Width).fill({
                Value: 0
            }))
        }
        console.log(CreateMatrix2D(2, 3))

voraa 11.01.2025 13:44

рони, Так нельзя
new Array(Width).fill({Value: 0 })

Вот что получится
Один раз создастся объект {Value: 0 } и все элементы массива заполнятся ссылками на него, на единственный объект.
Надо
Array.from({length:Width}, () => {Value:0})

function CreateMatrix2D(Width, Height) {
	return  Array.from({length:Height},
			() => Array.from ({length: Width}, 
				() => {Value: 0}
			)
		)
}
console.log(CreateMatrix2D(2, 3))

рони 11.01.2025 15:50

Цитата:

Сообщение от voraa
Надо

согласен.

ksa 13.01.2025 10:21

Цитата:

Сообщение от REAB
но код вообще зависает

Вот так работает...

alert(JSON.stringify(CreateMatrix2D(2, 3), null, 3))
//
function CreateMatrix2D(Width, Height){
    var MX = [];
	for (var i = 0; i < Height; ++i) {
		var A = [];
		for (var j = 0; j < Width; ++j) {
			A.push({Value: 0});
		}
        MX.push(A);
    }
    return MX;
}

REAB 14.01.2025 05:14

Благодарю


Часовой пояс GMT +3, время: 14:19.