2017-12-21 7 views
0

別の配列を入力として使用してオブジェクトの配列を作成しようとしています。私は、ループの次のコードを持っている:Javascriptオブジェクトを正しく初期化できません

// Setup product key for local items 
    for (var i=0; i<$scope.listDetails.details.length ; i++) { 
     if ($scope.listDetails.details[i].productIdentifier2 == 'Local') { 
      var productFound = false; 
      for (var j=0; j< $scope.allproducts.length ; j++) { 
       if ($scope.listDetails.details[i].category == $scope.allproducts[j].category && $scope.listDetails.details[i].productname == $scope.allproducts[j].productname && $scope.listDetails.details[i].productIdentifier2 == $scope.allproducts[j].productIdentifier2) { 
        $scope.listDetails.details[i].productKey = $scope.allproducts[j].productKey; 
        productFound = true; 
        break; 
       } 
      } 
      // Group all products to be inserted 
      if (productFound==false) { 
       var productDetailSingle = {}; 
       console.log("productDetail init"); 
       console.log(productDetailSingle); 
       productDetailSingle.category = $scope.listDetails.details[i].cateogry; 
       productDetailSingle.itemStatus = $scope.listDetails.details[i].itemStatus; 
       productDetailSingle.productIdentifier1 = $scope.listDetails.details[i].productcode; 
       productDetailSingle.productIdentifier2 = $scope.listDetails.details[i].productIdentifier2; 
       productDetailSingle.productName = $scope.listDetails.details[i].productname; 
       productDetailSingle.productname = $scope.listDetails.details[i].productname; 
       productDetailSingle.productcode = $scope.listDetails.details[i].productcode; 
       console.log("productDetail push"); 
       console.log(productDetailSingle); 
       productsToAdd.push(productDetailSingle); 
      } 
     } 
    } 

私が午前問題は、私はproductDetailSingleオブジェクトをログインしたとき、私は初期化されなかった他のプロパティを取得していますということです。あなたが見ることができるように

[Log] productDetail init (console-via-logger.js, line 173) 
[Log] {} (console-via-logger.js, line 173) 
[Log] productDetail push (console-via-logger.js, line 173) 
[Log] Object (console-via-logger.js, line 173) 

category: undefined 
itemStatus: "OPEN" 
productIdentifier1: 0 
productIdentifier2: "Local" 
productName: "mushroom " 
productcode: 0 
productname: "mushroom " 

Object Prototype 

[Log] productDetail init (console-via-logger.js, line 173) 
[Log] {} (console-via-logger.js, line 173) 
[Log] productDetail push (console-via-logger.js, line 173) 
[Log] Object (console-via-logger.js, line 173) 

available: "Y" 
category: undefined 
itemStatus: "OPEN" 
price: null 
productDesc: null 
productIdentifier1: 0 
productIdentifier2: "Local" 
productKey: 53 
productName: "nido milk" 
productcode: 0 
productname: "nido milk" 
uuid: "BAAFE64E-CF76-4156-A09F-80F678E3A2B0" 

オブジェクトのプロトタイプ

、最初のオブジェクトが正しく初期化されています。ここでの条件であれば(productFound == false)のためのコンソールログの出力があります。しかし、2番目のオブジェクトでは、最初に{}に設定しましたが、2番目のオブジェクトに追加された他のプロパティがありました。誰もこのタイプの問題に以前に遭遇しましたか?

+0

あなたは '$ scope.listDetails.details [i]の.cateogryにタイプミスがあり;' –

答えて

0

このため使用関数型言語は...

const productsToAdd = $scope.listDetails.details 
    .filter(detail => detail.productIdentifier2 === 'local') 
    .map(detail => { 
    const productKey = $scope.allproducts 
     .filter(product => (detail.category && detail.productName === product.productName && detail.productIdentifier2 === product.productIdentifier2)) 
     .map(product => product.productKey) 
     .reduce((memo, productKey) => productKey, false); 

    if(!productKey) { 
     return { 
     category: detail.category, 
     itemStatus: detail.itemStatus, 
     productIdentifier1: detail.productIdentifier1, 
     productIdentifier2: detail.productIdentifier2, 
     productName: detail.productName, 
     productcode: detail.productcode 
     }; 
    } else { 
     detail.productKey = productKey 
    } 

    return false; 
    }) 
    //remove the falses from above 
    .filter(productToAdd => productToAdd); 
+0

感謝。 Chromeでデバッグしたときに問題が見つかりました。表示されている値は、console.logが実行されたときの値ではなく、オブジェクトの現在の値であるようです。 –

関連する問題