多个数组成一个数组

时间:2014-01-14 13:07:57

标签: javascript arrays

我需要five.myArraysCombined属性的帮助。

我需要它只等于1个数组(它目前在小提琴中做的)并且我需要它不要将任何数字加在一起。 (所以数组中的每个数字都不应超过20,就像其他数组中的数字都不超过20

http://jsfiddle.net/Dc6HN/1/

例如,如果五个数组是这样的

five.myArray1 = [7,2,9,19,3];
five.myArray2 = [6,18,8,1,7];
five.myArray3 = [7,19,4,8,2];
five.myArray4 = [11,9,1,14,5];
five.myArray5 = [3,18,8,9,2];

然后所有这些数组合起来应该是这样的

five.myArraysCombined = [7,2,9,19,3,6,18,8,1,7,7,19,4,8,2,11,9,1,14,5,3,18,8,9,2];

相关代码:

function theNumberClass() {
    this.myArray = [[],[],[],[],[]];
    this.myArraysCombined = [];
}
var five = new theNumberClass();

function prePickNumbers(objName, theNum, theSumNum, theMaxNum, theMinNum) {
    var zzz = [];
    for (var x = 0; x < theNum; x += 1) {
    pickNumbers(objName.myArray[x], theNum, theSumNum, theMaxNum, theMinNum);
      zzz += objName.myArray[x];
    }
    objName.myArraysCombined.push(zzz);
}

prePickNumbers(five, 5, 40, 20, 1);

我最近的尝试是var zzz,然后将其推送到属性,但是当我这样做时,它有时会将数字中的数字相加,这不是我需要的。

我也尝试了几次使用.concat()的尝试,但它似乎把它变成了一个字符串,有时候也加起来了。

4 个答案:

答案 0 :(得分:2)

我猜这个问题是“+ =”运算符。此运算符用于对值求和,而不是向数组添加新元素。以下面的代码行为例:

zzz += objName.myArray[x];

猜测是“myArray [x]”被添加到zzz的值而不是附加到数组的末尾。在javascript中向数组添加元素时,push是最佳选择。写这一行的更好方法是:

zzz.push(objName.myArray[x]);

这个问题有点令人困惑,所以我不确定这是不是你想要的,但希望无论如何都会有所帮助。

答案 1 :(得分:2)

假设您有这些数组:

var a = [1, 2, 3]
var b = [4, 5, 6]
var c = [8]

然后你可以将所有这些与

合并
var all = [].concat.apply([],[a,b,c])

var all = [a,b,c].reduce(function(merged, arr){ return merged.concat(arr) })

在这两种情况下你都会得到

[1, 2, 3, 4, 5, 6, 8]

第一个解决方案更简单,第二个解决方案更具扩展性,例如,您可以删除重复或进行任何类型的过滤/转换。

答案 2 :(得分:1)

five.reduce(function(o,n){return o.concat(n)},[])

这会将数组减少为单个值,在本例中为数组。您可以在MDN上查找Array.reduce()以获取更多信息。

答案 3 :(得分:0)

经过几个小时尝试在此主题和另一个主题上留下的所有建议,并尝试多个其他事情。我想我终于找到了一种非常简单的方法。这是我尝试的唯一方式100%像我想要的那样。

http://jsfiddle.net/Dc6HN/2/

function prePickNumbers(objName, theNum, theSumNum, theMaxNum, theMinNum) {
    for (var x = 0; x < theNum; x += 1) {
    pickNumbers(objName.myArray[x], theNum, theSumNum, theMaxNum, theMinNum);
    objName.myArraysCombined.push(objName.myArray[x]);
}
   objName.myArraysCombined = objName.myArraysCombined.toString();
   objName.myArraysCombined = objName.myArraysCombined.split(',');
}