簡體   English   中英

JavaScript等同於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);
});

了解有關數組的更多信息

Felix的回答很好而且可讀,我只想向您介紹幾個有用的習慣用法。

與php不同,javascript || (布爾OR)運算符,盡管其名稱不返回布爾值,但返回第一個非偽操作數。 所以當你寫

a = thing || otherThing

如果thing為假(= null, undefined, 0, empty stringnull, 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);

如果您想進一步縮短,請用concat替換push

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

這有點矯kill過正,但我​​想您會明白的。 不要忘記檢查您的元素是否存在

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM