我在JavaScript中创建多维数组时遇到了问题。
PHP代码如下所示:
<?php
$matches = array(1, 2, 3, 4, 4, 4, 6, 6, 2, 3);
foreach($matches as $match) {
$levels[$match][] = $match;
}
print_r($levels);
?>
$ level的print_r:
levels[1][0] = 1
levels[2][0] = 2
levels[3][0] = 3
levels[4][0] = 4
levels[4][1] = 4
levels[4][2] = 4
levels[6][0] = 6
levels[6][1] = 6
levels[2][1] = 2
levels[3][1] = 3
我在JavaScript中创建相同的数组时遇到问题。
<script>
var levels = [];
$([1, 2, 3, 4, 4, 4, 6, 6, 2, 3]).each(function(key, value) {
levels[value][] = value;
});
</script>
有人可以帮助我在JavaScript中创建相同的数组吗?
答案 0 :(得分:5)
如果没有,JavaScript不会神奇地创建一个数组。你必须自己创建它。所以它会像
$([1, 2, 3, 4, 4, 4, 6, 6, 2, 3]).each(function(key, value) {
if (levels[value] == null) {
levels[value] = [];
}
levels[value].push(value);
});
答案 1 :(得分:2)
菲利克斯的答案是好的和可读的,我只想向你介绍一些有用的习语。
与php不同,javascript ||
(布尔OR)运算符,尽管名称不同,但不返回布尔值,而是返回第一个非伪操作数。所以当你写
a = thing || otherThing
如果otherThing
是假的,则结果为thing
(= null, undefined, 0, empty string
)。因此,像这样检查
if(!foo)
foo = bar
可以更简洁地写成
foo = foo || bar
如果foo
真实,它只会将foo
分配给foo
(无操作),否则foo
会变为bar
。
应用于您的问题,这将如下所示:
levels[value] = levels[value] || [];
levels[value].push(value);
levels[value] = (levels[value] || []).concat(value);
这不一定是更具可读性或效率,只是值得了解的事情。
答案 2 :(得分:0)
var levels = [];
var orgArray = [1, 2, 3, 4, 4, 5, 6, 2];
for (var i = 0; i < orgArray.length; i++) {
var value = orgArray[i];
if (levels[value] === undefined)
levels[value] = []
levels[value].push(value);
}
//Print
for (var j = 0; j < levels.length; j++)
if (levels[j])
for (var k = 0; k < levels[j].length; k++)
console.log("levels[" + j + "][" + k + "] = " + levels[j][k]);
这有点矫枉过正,但你会明白我的观点。 不要忘记检查你的元素是否存在