2015-06-13 20 views
0

数组的数组我已经和数组的数组,看起来像这样:推值转换成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]]; 

使用此代码我得到一个错误“无法读取属性“推”未定义“

同样重要的是我不能使用arr [3] .push或arr [4] .push因为我的情况更复杂,我总是需要将值推送到新的数组,出现在我的数组上。无论我内部有多少物体。

+0

尝试解释这种代码的使用情况。我保证有更好的方法来解决它。 – Oka

+0

你必须只使用arr.push(val);它会将值附加到数组。 – sAcH

回答

0

如果您正在寻找排序的数组元素那么你的代码将无法正常工作。请参阅下面的代码对元素进行排序,它也将解决您未定义的问题。

<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> 
2

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

这是发生,因为arr[arr.length]永远是undefined

所以你基本上是做

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

“同样重要的是,我不能改编[3] .push使用或常用3 [4] .push因为我的情况比较复杂,总是我需要将值推送到新数组中,而这个数组将出现在我的数组上,无论我有多少内部对象。“

这个算法是一个code smell寿和我们可能可以帮助你更好,如果你发布你的实际代码。

要明白我在说什么,考虑下面的代码

// 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]] 
+0

在微积分口味中命名变量。真棒。 –

0

你需要的东西是这样的:

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