JavaScript equivalent of PHP $array[$i][]


JavaScript equivalent of PHP $array[$i][]

我在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);
?>

$levels 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中创建相同的数组吗?

如果没有

数组,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);
});

详细了解阵列。

菲利克斯的回答很好,可读性强,我只想向你介绍几个有用的成语。

与php不同,javascript ||(布尔OR)运算符,尽管它的名字,不返回布尔值,而是第一个非虚假操作数。所以当你写的时候

a = thing || otherThing

如果结果thing是假的(= null, undefined, 0, empty string),结果将是otherThing的。因此像这样的检查

if(!foo)
   foo = bar

可以更简洁地写成

foo = foo || bar

如果foo是真实的,它只是将foo分配给foo(无操作),否则,foo变得bar

应用于您的问题,这将如下所示:

levels[value] = levels[value] || [];
levels[value].push(value);

如果您想进一步缩短此时间,请将push替换为concat

levels[value] = (levels[value] || []).concat(value);

这不一定更具可读性或效率,只是值得了解。

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]);

这有点矫枉过正,但我认为你会明白这一点。不要忘记检查您的元素是否存在