在 Javascript 中推送到二维数组
Push to 2D Arrays in Javascript
我正在尝试了解 2D 数组在 Javascript 中的工作方式,我目前正在尝试按类别存储数据。在这种情况下,我有一个地图列表,例如...
arena_badlands
arena_dust
ctf_2fort
cp_dustbowl
我想创建一个二维数组,其中按类型(arena、ctf、cp)分类,以便我可以更有效地处理数据。无论出于何种原因,我都无法按预期使用 push()
方法。谁能帮忙分享一下我做错了什么?
由于列表中的地图不一定按类型排序,因此我无法创建单个竞技场地图数组,然后将其放入 availableMaps 中。
var availableMaps = [[]]; // Store all maps on the server which can be loaded
function getMaps()
{
$.ajax({
type: "POST",
url: "handler.php",
data: { 'action': 'getMaps' },
dataType: 'json',
success: function(data)
{
var maps = data['maps'];
var counter = 0;
$.each( maps, function( key, value )
{
// Split map name to fetch the type (ex: arena_badlands would be an 'arena' map)
var parts = value.split("_");
var mapType = parts[0];
availableMaps[mapType][counter].push(value);
counter++;
});
}
});
}
这是一种方法:
var inputs = ["arena_badlands", "arena_dust", "ctf_2fort", "cp_dustbowl"];
function getAvailableMaps(inputs) {
var map = {}, parts, name, item, items;
for (var i = 0; i < inputs.length; ++i) {
parts = inputs[i].split('_');
name = parts[0];
item = parts.slice(1).join("");
items = map[name] || (map[name] = []);
items.push(item);
}
return map;
}
var availableMaps = getAvailableMaps(inputs);
它在根目录下创建一个对象来保存命名索引,并使用一个数组来存储项目列表。
还有另一种方法:
var inputs = ["arena_badlands", "arena_dust", "ctf_2fort", "cp_dustbowl"];
function getAvailableMaps(inputs) {
var map = {}, input, name, item, items;
for (var i = 0, i2; i < inputs.length; ++i) {
input = inputs[i];
i2 = input.indexOf("_");
if (i2 == -1) continue; // (or throw an error)
name = input.substring(0, i2);
item = input.substring(i2+1);
items = map[name] || (map[name] = []);
items.push(item);
}
return map;
}
var availableMaps = getAvailableMaps(inputs);
我正在尝试了解 2D 数组在 Javascript 中的工作方式,我目前正在尝试按类别存储数据。在这种情况下,我有一个地图列表,例如...
arena_badlands
arena_dust
ctf_2fort
cp_dustbowl
我想创建一个二维数组,其中按类型(arena、ctf、cp)分类,以便我可以更有效地处理数据。无论出于何种原因,我都无法按预期使用 push()
方法。谁能帮忙分享一下我做错了什么?
由于列表中的地图不一定按类型排序,因此我无法创建单个竞技场地图数组,然后将其放入 availableMaps 中。
var availableMaps = [[]]; // Store all maps on the server which can be loaded
function getMaps()
{
$.ajax({
type: "POST",
url: "handler.php",
data: { 'action': 'getMaps' },
dataType: 'json',
success: function(data)
{
var maps = data['maps'];
var counter = 0;
$.each( maps, function( key, value )
{
// Split map name to fetch the type (ex: arena_badlands would be an 'arena' map)
var parts = value.split("_");
var mapType = parts[0];
availableMaps[mapType][counter].push(value);
counter++;
});
}
});
}
这是一种方法:
var inputs = ["arena_badlands", "arena_dust", "ctf_2fort", "cp_dustbowl"];
function getAvailableMaps(inputs) {
var map = {}, parts, name, item, items;
for (var i = 0; i < inputs.length; ++i) {
parts = inputs[i].split('_');
name = parts[0];
item = parts.slice(1).join("");
items = map[name] || (map[name] = []);
items.push(item);
}
return map;
}
var availableMaps = getAvailableMaps(inputs);
它在根目录下创建一个对象来保存命名索引,并使用一个数组来存储项目列表。
还有另一种方法:
var inputs = ["arena_badlands", "arena_dust", "ctf_2fort", "cp_dustbowl"];
function getAvailableMaps(inputs) {
var map = {}, input, name, item, items;
for (var i = 0, i2; i < inputs.length; ++i) {
input = inputs[i];
i2 = input.indexOf("_");
if (i2 == -1) continue; // (or throw an error)
name = input.substring(0, i2);
item = input.substring(i2+1);
items = map[name] || (map[name] = []);
items.push(item);
}
return map;
}
var availableMaps = getAvailableMaps(inputs);