簡體   English   中英

將值推入JavaScript中的數組數組

[英]Push value into array of arrays in JavaScript

我有看起來像這樣的數組數組:

var arr = [[1,2,3],[4,5,6],[7,8,9]];

之后,我有一個數字列表和一個循環

var list = [15,10,11,14,13,12]

for (i=0; i<list.length; i++) { 

    var val = list[i];

    if (val >= 10 && val < 13) {
     arr[arr.length].push(val);   
    }
    else if (val >= 13 && val < 16) {
     arr[arr.length+1].push(val);   
    }
}

因此,基本上,我希望輸出如下所示:

arr = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]];

通過此代碼,我得到一個錯誤“無法讀取未定義的屬性'push'”

同樣重要的是我不能使用arr [3] .push或arr [4] .push,因為我的情況更加復雜,並且總是需要將值推送到新數組,該新數組將出現在數組的上方。 不管我里面有多少物體。

發生這種情況是因為arr[arr.length]將始終是undefined

所以你基本上在做

undefined.push(x);
// Cannot read property 'push' of undefined

“同樣重要的是,我不能使用arr [3] .push或arr [4] .push,因為我的情況更加復雜,並且總是需要將值推送到新數組,該數組將出現在我的數組上方。我里面有幾個物體。”

該算法是一種代碼嗅覺 ,如果您發布實際代碼,我們可能會更好地幫助您。

要了解我在說什么,請考慮以下代碼

// your numbers in a random order
var xs = [7,10,2,15,4,9,14,1,8,12,5,11,3,6,13];

// sort them
xs.sort(function(a, b) { return a-b; });

// define a function that "chunks" a list into smaller parts
function chunk(xs, n) {
  function iter(ys, y, xs) {
    if (y.length === 0) return ys;
    return next(ys.concat([y]), xs);
  }
  function next(ys, xs) {
    return iter(ys, xs.slice(0,n), xs.slice(n));
  }
  return next([], xs);
}

// call our function on your sorted list
var ys = chunk(xs, 3);

console.log(JSON.stringify(ys));
//=> [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]

arr[arr.length]永遠不會返回任何有意義的值,請考慮一下:如果您有一個長度為6的數組,則可以使用索引0..5。 arr [6]總是返回undefined,因為那里什么也沒有。

您可能需要這樣的東西:

if (val >= 10 && val < 13) {
 arr[arr.length - 1].push(val);   
}
else if (val >= 13 && val < 16) {
 arr[arr.length].push([val]);   
}

如果要對數組元素進行排序,則您的代碼將無法工作。 請參考以下代碼對元素進行排序,它還將解決您未定義的問題。

<script>
var arr = [[1,2,3],[4,5,6],[7,8,9]];
var list = [15,10,11,14,13,12];
var arr1=[];
var arr2=[];

for (i=0; i<list.length; i++) {

    var val = list[i];

    if (val >= 10 && val < 13) {
     arr1.push(val);
    }
    else if (val >= 13 && val < 16) {
     arr2.push(val);
    }

}
arr1.sort(function(a, b){return a-b});
arr.push(arr1);
arr2.sort(function(a, b){return a-b});
arr.push(arr2);
console.log(arr);
</script>

您需要這樣的東西:

 var arr = [[1,2,3],[4,5,6],[7,8,9]]; var list = [15,10,11,14,13,12]; for (var i=0; i<list.length; i++) { var val = list[i]; var index = Math.floor((val-1)/3); if ( arr[index] === undefined ) arr[index] = []; arr[index].push(val); arr[index].sort(); } console.log( arr ); 

暫無
暫無

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

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