我需要five.myArraysCombined
属性的帮助。
我需要它只等于1个数组(它目前在小提琴中做的)并且我需要它不要将任何数字加在一起。 (所以数组中的每个数字都不应超过20,就像其他数组中的数字都不超过20 )
例如,如果五个数组是这样的
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()
的尝试,但它似乎把它变成了一个字符串,有时候也加起来了。
答案 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%像我想要的那样。
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(',');
}