二维数组,就像在 PHP 中一样
Two dimensional array like in PHP
我正在寻找的是这段代码的Javascript等效物:
$map[$card][$bit] = $val;
(如您所知,这也会立即实例化数组)
我尝试并研究了一下,但似乎还有许多其他方法可以做到这一点,我想知道我的特定代码的最佳方法是什么。我目前正在从数据库中检索$card和$bit,并创建某种映射,为地图中的每个位置提供一个值。
Javascript代码:
var jPunten = JSON.parse(data);
var puntmap = [][];
for (var i=0;i<jPunten.length;i++)
{
puntmap[jPunten[i].CARDNR][jPunten[i].BITNR] = jPunten[i].STATDEV;
}
注意:
本答案的第一部分假设您知道 JS 中数组和对象之间的区别,并且您用作键的值是数字,而不是字符串。
首先要做的事。确保无论data
持有什么,它都是数组的 json 表示形式,而不是对象文字。请尝试console.log(data);
,并检查您的主机。如果您看到类似以下内容:
"{"1":"123"}"
然后for
循环不会切断它,因为jPunten
是一个对象,而不是一个数组。数组如下所示:
"[123,4342]"
循环对象是使用 for...in
循环完成的:
for(var property in jPunten)
{
if (jPunten.hasOwnProperty(property))
{
console.log(jPuntent[property].CARDNR);//this will work
}
}
但是请访问 json.org 以获取有关 JSON 格式的详细信息,并检查 MDN,例如 hasOwnProperty
。MDN 也有一个很好的列表,其中包含有关您可以在 JS 中使用的每种循环类型的良好文档。
无论如何,回到手头的问题:
仅限数字键:
如果要将变量初始化为 2D 数组 om JS,则应在主数组内声明第二个(内部)数组。
总之:
var puntmap = [][];//WRONG
//should be:
var puntmap = [[]];
如果你考虑一下,这是有道理的:如果[]
是一个数组,那么[][]
是两个单独的数组。如果一个数组应该是另一个数组的一部分,那么只需将其写入该数组中:
[//an array
[]//first element in the array => an array
]
但是鉴于您似乎正在填充稀疏数组(请查看我对这个问题的回答,我在其中解释了稀疏数组的概念),您可能需要考虑对象文字,或者只是将puntmap
声明为任何旧数组。
然后,像这样填充数组:
var puntmap = [];
for (var i=0;i<jPunten.length;++i)
{
//create an array under key jPunten[i].CARDNR, if it doesn't exist already
puntmap[jPunten[i].CARDNR] = puntmap[jPunten[i].CARDNR] || [];
//then, assign your value
puntmap[jPunten[i].CARDNR][jPunten[i].BITNR] = jPunten[i].STATDEV;
}
字符串常量作为键(属性)
如果这个假设(jPunten[i].CARDNR
等)是数字的,是错误的,那么请考虑直接使用对象。无论如何,数组都会强制到一个对象,只有你的代码不会让任何人相信 length
属性,其他 Array 方法可用......
var puntmap = {};//create object literal
for (var i=0;i<jPunten.length;++i)
{
//create an array under key jPunten[i].CARDNR, if it doesn't exist already
if (!puntmap.hasOwnProperty(jPunten[i].CARDNR))
{//if object does not have property
puntmap[jPunten[i].CARDNR] = {};//create child object literal
//or, if jPunten[i].BITNR is always numeric:
puntmap[jPunten[i].CARDNR] = [];//you can use an array here!
}
//then, assign your value as you would
puntmap[jPunten[i].CARDNR][jPunten[i].BITNR] = jPunten[i].STATDEV;
}
现在,由于您使用的是对象文字,您的代码不会混淆任何人,也没有人会尝试执行以下操作:
puntmap.slice(12,3);
在一个对象上(php-speak中的assoc arrray)将抛出错误。
- 在SVG地图上添加水的渐变,就像在谷歌地图(PHP/JS)中一样
- 我如何使用下划线模板(<%%>),就像我在PHP中使用它一样(lt;?PHP?>
- 如何在 JavaScript 中将字符串更改为变量,就像 PHP 中的 $$ 一样
- JavaScript 内联如果变量像 PHP 一样赋值
- 二维数组,就像在 PHP 中一样
- 像PHP一样使用json数组“水合”Javascript对象实例
- 使用 JS 插入代码,就像 php 中的 echo 一样
- 多维数组与JavaScript就像php一样
- 像PHP一样的JS设置类型
- PHP call_user_func像 Javascript 调用一样绑定这个 Arg
- 在 PHP 中使用每个,就像 jquery 一样
- 使用 JavaScript 获取 IP 地址是否与通过 PHP 获取IP地址一样准确
- 如何像在PHP中一样创建Javascript 2-d数组
- JavaScript正则表达式并像PHP preg_replace一样替换
- 有没有像PHP一样进行Rijndael 256位加密的JavaScript库
- PHP智能||(OR)运算符,就像Javascript中一样
- 在JavaScript中创建数组,就像在PHP中一样
- 像在PHP中一样,在jQuery中执行单引号(')和双引号(quot;)的工作
- 如何在我的HTML页面中运行Node.js脚本,就像我在PHP中一样
- Apache:像.php文件一样执行Javascript文件