如何将另一个变量的值设置为数组的值?

时间:2012-12-07 00:20:47

标签: javascript

我不确定这里的问题是什么,但这是我的代码

var btotal = [];
var songarray = [];
function whileplaying() {
    var playingSound = soundManager.getSoundById('aSound');
    for (var i=0;i<8;i++) {
        var ttotal = 0;
        for (var n=0;n<32;n++) {
            var eblock = (i*32)+n;
            ttotal = ttotal+(playingSound.eqData.left[eblock]*100);
        }
        ttotal = ttotal/32;
        btotal[i] = ttotal;
    }
    console.log(btotal);
    songarray.push(btotal);
}

为了解释,当声音正在播放时,我得到一个长度为8的数组,总结该频率块的EQ值。最后我将这个数组附加到songarray,所以理论上说,songarray是一个包含声音在数组中的EQ数据的数组。

问题在于,当我获得songarray的值时,它有许多我期望的数组,但它们都是相同的,并且都是最后一个数据点,即btotal的最新值。 / p>

所以这段代码会运行,而控制台会显示(例如):

[42.743750000000006, 2.98125, 0.10625000000000001, 0, 0, 0, 0, 0]
[38.859374999999986, 2.8, 0.09375, 0, 0, 0, 0, 0]
[56.26874999999998, 21.831250000000004, 3.853125, 0.340625, 0, 0, 0, 0]
[46.459374999999994, 19.584374999999998, 1.4, 0, 0, 0, 0, 0]
[38.08125, 11.8, 1.0750000000000002, 0, 0, 0, 0, 0] 

然而,歌曲阵列的内容如下:

0: Array[8]
0: 38.08125
1: 11.8
2: 1.0750000000000002
3: 0
4: 0
5: 0
6: 0
7: 0
length: 8
__proto__: Array[0]
1: Array[8]
0: 38.08125
1: 11.8
2: 1.0750000000000002
3: 0
4: 0
5: 0
6: 0
7: 0
length: 8
__proto__: Array[0]

哪个是最新btotal数组的所有内容。这让我相信songarray中的每个条目仅指向btotal。那么我该如何制作它以使songarray中的每个数组都是我追加它时的btotal值,而不仅仅是一个指针?

2 个答案:

答案 0 :(得分:1)

您可能想要复制数组。

而不是

songarray.push(btotal);

使用

songarray.push(btotal.slice(0));

答案 1 :(得分:1)

在函数范围内定义btotal

var songarray = [];
function whileplaying() {
    var btotal = [];
    var playingSound = soundManager.getSoundById('aSound');
    for (var i=0;i<8;i++) {
        var ttotal = 0;
        for (var n=0;n<32;n++) {
            var eblock = (i*32)+n;
            ttotal = ttotal+(playingSound.eqData.left[eblock]*100);
        }
        ttotal = ttotal/32;
        btotal[i] = ttotal;
    }
    console.log(btotal);
    songarray.push(btotal);
}