迭代数组中的对象throws无法读取undefined的属性

Ich*_*aki 0 javascript

我有两个阵列caNCourbeDatacaN_1CourbeData,每一个包含12个对象,并且它们具有相同的对象结构.

这是一个对象的示例:

在此输入图像描述

所以我想要做的是创建一个新的array(caCourbe),它将包含一个对象列表,如下所示:

{
   y : '2016-01',
   chiffreAffaireN : 1256.92,
   chiffreAffaireN_1 : -141559.33
}
Run Code Online (Sandbox Code Playgroud)

chiffreAffaireN来自caNCourbeData[i].chiffreAffairechiffreAffaireN_1来自caN_1CourbeData[i].chiffreAffaire.

所以我做了如下:

var caCourbe = new Array();

caNCourbeData.forEach(function(i, caNCourbeDataElement){
    caCourbeElement = new Object();
    caCourbeElement.y = '2016-'+(i+1).toLocaleString(undefined, {minimumIntegerDigits: 2, useGrouping:false});
    caCourbeElement.chiffreAffaireN = caNCourbeDataElement.chiffreAffaire;
    caCourbeElement.chiffreAffaireN_1 = caN_1CourbeData[i].chiffreAffaire;
    caCourbe.push(caCourbeElement); 
});
Run Code Online (Sandbox Code Playgroud)

但后来我收到这个错误:

在此输入图像描述

在我的代码中我记录了caN_1CourbeData,我在控制台中获取了数组,但我不知道为什么我得到的是未定义的:

在此输入图像描述

我怎么解决这个问题?

编辑1:

我尝试使用forEach caN_1CourbeData而不是caNCourbeData因为它们具有与以下相同的长度:

caN_1CourbeData.forEach(function(i, caN_1CourbeDataElement){
    caCourbeElement = new Object();
    caCourbeElement.y = '2016-'+(i+1).toLocaleString(undefined, {minimumIntegerDigits: 2, useGrouping:false});
    caCourbeElement.chiffreAffaireN = caNCourbeData[i].chiffreAffaire;
    caCourbeElement.chiffreAffaireN_1 = caN_1CourbeDataElement.chiffreAffaire;
    caCourbe.push(caCourbeElement); 
});
Run Code Online (Sandbox Code Playgroud)

但我总是得到同样的错误,这一次在这一行: caCourbeElement.chiffreAffaireN = caNCourbeData[i].chiffreAffaire;

编辑2:

var caNCourbeData = [{
    "mois": 1,
    "nbFactures": 2,
    "nbFacturesReglees": 1,
    "nbdossiersRealise": 1,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 1256.92,
    "id": 0
}, {
    "mois": 2,
    "nbFactures": 4,
    "nbFacturesReglees": 2,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 413.00,
    "id": 1
}, {
    "mois": 3,
    "nbFactures": 3,
    "nbFacturesReglees": 3,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 30.00,
    "id": 2
}, {
    "mois": 4,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 3
}, {
    "mois": 5,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 4
}, {
    "mois": 6,
    "nbFactures": 9,
    "nbFacturesReglees": 1,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 2253.31,
    "id": 5
}, {
    "mois": 7,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 2,
    "nbContratConverti": 0,
    "id": 6
}, {
    "mois": 8,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 7
}, {
    "mois": 9,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 8
}, {
    "mois": 10,
    "nbFactures": 2,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 450.60,
    "id": 9
}, {
    "mois": 11,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 10
}, {
    "mois": 12,
    "nbFactures": 0,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "id": 11
}];


var caN_1CourbeData = [{
    "mois": 1,
    "nbFactures": 36,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 3,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": -141559.33,
    "id": 0
}, {
    "mois": 2,
    "nbFactures": 144,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 23,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 19662.80,
    "id": 0
}, {
    "mois": 3,
    "nbFactures": 39,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 10835.42,
    "id": 0
}, {
    "mois": 4,
    "nbFactures": 30,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 2,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 12166.74,
    "id": 0
}, {
    "mois": 5,
    "nbFactures": 73,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 1,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 19391.04,
    "id": 0
}, {
    "mois": 6,
    "nbFactures": 36,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 5,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 23929.57,
    "id": 0
}, {
    "mois": 7,
    "nbFactures": 24,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 1,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 5446.59,
    "id": 0
}, {
    "mois": 8,
    "nbFactures": 24,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 3019.31,
    "id": 0
}, {
    "mois": 9,
    "nbFactures": 20,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 3178.76,
    "id": 0
}, {
    "mois": 10,
    "nbFactures": 1,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 0,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 10.00,
    "id": 0
}, {
    "mois": 11,
    "nbFactures": 14,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 2,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 6020.56,
    "id": 0
}, {
    "mois": 12,
    "nbFactures": 21,
    "nbFacturesReglees": 0,
    "nbdossiersRealise": 6,
    "nbContrat": 0,
    "nbContratConverti": 0,
    "chiffreAffaire": 4709.05,
    "id": 0
}];
Run Code Online (Sandbox Code Playgroud)

Sta*_*oul 5

切换传递给forEach回调的参数的顺序,index是第二个参数,这在我的控制台中有效:

caN_1CourbeData.forEach(function(caN_1CourbeDataElement, i){
    caCourbeElement = new Object();
    caCourbeElement.y = '2016-'+(i+1).toLocaleString(undefined, {minimumIntegerDigits: 2, useGrouping:false});
    caCourbeElement.chiffreAffaireN = caNCourbeData[i].chiffreAffaire;
    caCourbeElement.chiffreAffaireN_1 = caN_1CourbeDataElement.chiffreAffaire;
    caCourbe.push(caCourbeElement); 
});
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Parameters