2016-04-15 58 views
0

我已經在一個文件中(/static/models.json)像這樣在角度JS項目得到了JSON數據輸入值和JSON數據驗證..使用角度的js的JavaScript

{ 
    "familyType": { 
     "A650": [{ 
      "partID": "2630_H" 
     }, { 
      "partID": "2690_H" 
     }, { 
      "partID": "2680_H" 
     }, { 
      "partID": "2600_H" 
     }, { 
      "partID": "2620_H" 
     }, { 
      "partID": "2610_H" 
     }], 
     "S400": [{ 
       "partID": "S500_Aru" 
      }, { 
       "partID": "S600_Aru" 
      }, { 
       "partID": "S700_Aru" 
      }, { 
       "partID": "S800_Aru" 
      }, { 
       "partID": "S900_Aru" 
      }, { 
       "partID": "S100_Aru" 
      } 
     ] 
    } 
} 

我有以下功能參數傳入該方法(Part_id1,Part_id2)和函數內..我有兩個家庭類型(A650,S400),我需要檢查兩個輸入part_Id的(Part_id1,Part_id2)是否屬於相同的家族或不相同(即,A650S400

如果兩個PART_ID的(Part_id1,Part_id2)來自不同的家庭類型,我需要提醒用戶... 如何才能通過JSON文件遍歷和兩個家庭類型比較PART_ID的..

$scope.ValidateModelList = function(Part_id1, Part_id2, $http) { 
    if ($scope.firTable.selectedRowsCount != 0) { 
     $http.get("/static/models.json") 
      .success(function(response) { 
       $scope.names = response; 
      }); 
     // here i am storing json data in $scope.names object 
     // here i need to check that the part_ids with the family 
    } 
} 

是否有任何一個,請在此,這將是非常感謝我的幫助....

提前許多感謝....

更新

function ValidateModel(partIDlist){ 

      alert('2'); 
      var data = stubdata; // Stubdata is actual json data mentioned above 
      var partIdResult = []; 
      for (var key in data.familyType) { 

       angular.forEach(data.familyType[key], function (object) { 

        angular.forEach(partIDlist, function (partId) { 

         if (partId == object.partID) { 
          partIdResult.push({ 
           value: partId, family: key 
          }); 
         } 
        }); 
       }); 
      } 

      for (var i = 0; i < partIdResult.length; i++) { 
       // alert(partIdResult.length); 
       //alert(partIdResult.family); 
       alert(JSON.stringify(partIdResult)) 
       alert(partIdResult.family); // this is giving undefined value 
      alert(partIdResult[0].family); 

       if (partIdResult.family === partIdResult[0].family){ 
        alert('yes'); 
        alert("part_id's are same"); 
       } 
       else if (partIdResult.family !== partIdResult[0].family) { 
        alert("part_id's not same"); 
       } 
      } 
     } 

這裏我傳遞一個列表這樣的..

VAR partIDlist = 「S900_Aru」, 「S500_Aru」, 「2610_H」];

和我得到警報(JSON.stringify(partIdResult))partIdResult像這樣

[{"value":"S900_Aru","family":"S400"}, 
{"value":"S500_Aru","family":"S400"}, 
{"value":"2610_H","family":"A650"}] 

我應該得到這三個PART_ID的不屬於同一型號..而不是此我越來越PART_ID的是屬於同一

請你對這個...提前感謝幫助....

回答

1

首先更迭已被棄用,而不是使用。這時。第二個數據存儲在response.data中。

.then(function(response) { 
    var data = response.data; 
    var partId2Family = null, partId1Family = null; 

    for(var key in data.familyType){ 
     angular.forEach(data.familyType[key], function(object){ 
       if(Part_id1 == object.partID){ 
        partId1Family = key; 
       } 
       if(Part_id2 == object.partID){ 
        partId2Family = key; 
       } 
     }) 
    }  
    if(partId1Family !== PartId2Family){ 
      // warning 
    }   
} 

這應該可以做到。

編輯:數組版本

.then(function(response) { 
    var data = response.data; 
    var partIdResult = []; 
    for(var key in data.familyType){ 
     angular.forEach(data.familyType[key], function(object){ 
       angular.forEach(partIds, function(partId){ 
        if(partId == object.partID){ 
         partIdResult.push({value:partId, family:key}); 
        } 
       }); 
     }) 
    }  
    for(var i = 1; i < partIdResult.length; i++){ 
     if(partIdResult[i].family !== partIdResult[0].family){ 
       //error 
     } 
    }  
} 
+0

在許多感謝..多了一個查詢。如果我們得到了數組列表與PART_ID的名單.....這時候我們怎麼能檢查是否所有人都屬於同一家族或不... –

+0

我編輯並添加了陣列版本。注意:在網上檢查underscorejs,這是一個非常有用的庫,它在處理循環數組或對象屬性時提供實用程序函數來編寫更乾淨的代碼。 – Walfrat

+0

對不起,我不能使用其他公司的政策js插件... –

0

雖然沒有明確你的問題,下面是你要檢查的東西。

Object.keys(type.familyType).forEach(function(key,index) { 
    if(key === Part_id1 || key === Part_id2){ 
    //do something 
    } else { 
    //do something else 
    } 
}); 

一把小提琴。

https://jsfiddle.net/2cgww6ec/1/

0

試試這個

var t = { 
 
    "familyType": { 
 
     "A650": [{ 
 
      "partID": "2630_H" 
 
     }, { 
 
      "partID": "2690_H" 
 
     }, { 
 
      "partID": "2680_H" 
 
     }, { 
 
      "partID": "2600_H" 
 
     }, { 
 
      "partID": "2620_H" 
 
     }, { 
 
      "partID": "2610_H" 
 
     }], 
 
     "S400": [{ 
 
       "partID": "S500_Aru" 
 
      }, { 
 
       "partID": "S600_Aru" 
 
      }, { 
 
       "partID": "S700_Aru" 
 
      }, { 
 
       "partID": "S800_Aru" 
 
      }, { 
 
       "partID": "S900_Aru" 
 
      }, { 
 
       "partID": "S100_Aru" 
 
      } 
 
     ] 
 
    } 
 
}; 
 

 
search("2630_H","2620_H"); 
 

 
function search(ida,idb) { 
 
    $.each(t['familyType'], function(a, b) { 
 
    var str = JSON.stringify(b); 
 
    if(str.indexOf(ida)>=0 && str.indexOf(idb) >=0){ 
 
     alert("same family : " + a); 
 
     return; 
 
    } 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<p> search("2630_H","2620_H") will called <p>

0

試試這個:

var obj = { 
    "familyType": { 
     "A650": [ 
      { 
       "partID": "2630_H" 
      }, { 
       "partID": "2690_H" 
      }, { 
       "partID": "2680_H" 
      }, { 
       "partID": "2600_H" 
      }, { 
       "partID": "2620_H" 
      }, { 
       "partID": "2610_H" 
      } 
     ], 
     "S400": [ 
      { 
       "partID": "S500_Aru" 
      }, { 
       "partID": "S600_Aru" 
      }, { 
       "partID": "S700_Aru" 
      }, { 
       "partID": "S800_Aru" 
      }, { 
       "partID": "S900_Aru" 
      }, { 
       "partID": "S100_Aru" 
      } 
     ] 
    } 
}; 

for (familyid in obj.familyType){ 
    obj.familyTyle[familyid].forEach(function(key){ 
     if(key.partID == Part_id1) family1 = familyid; 
     if(key.partID == Part_id2) family2 = familyid; 
    }); 
} 

if(family1 === family2){ 
    alert('parts are same'); 
} 
+0

嗨,未來更多的家庭類型將增加,所以在這種情況下,我不能硬編碼每個家庭像這樣「obj.familyType.A650」。 .......有沒有任何通用的方式... –

+0

嘗試更新代碼@EnigmaState –

1
var partsList = { 
    "familyType": { 
     "A650": [{ 
      "partID": "2630_H" 
     }, { 
      "partID": "2690_H" 
     }, { 
      "partID": "2680_H" 
     }, { 
      "partID": "2600_H" 
     }, { 
      "partID": "2620_H" 
     }, { 
      "partID": "2610_H" 
     }], 
     "S400": [{ 
       "partID": "S500_Aru" 
      }, { 
       "partID": "S600_Aru" 
      }, { 
       "partID": "S700_Aru" 
      }, { 
       "partID": "S800_Aru" 
      }, { 
       "partID": "S900_Aru" 
      }, { 
       "partID": "S100_Aru" 
      } 
     ] 
    } 
}; 

function ValidateModelList(Part_id1, Part_id2){ 

    var part_id_1_family = getPartFamily(Part_id1); 
    var part_id_2_family = getPartFamily(Part_id2) 
    //alert(part_id_1_family + ", " + part_id_2_family); 
    //console.log("part_id_1_family", part_id_1_family); 
    //console.log("part_id_2_family", part_id_2_family); 
    if(part_id_1_family != part_id_2_family) alert("parts are from different families!"); 
    else alert("parts from same family.") 
} 

function getPartFamily(part_id) 
{ 
    var familyType = partsList.familyType; 
    // loop through family type 
    for(var family in familyType) 
    { 
    if(!familyType.hasOwnProperty(family)) continue; 
    //loop through part objects in this family 
    for(var j = 0; j < familyType[family].length; j++) 
    { 
     // check if parts id is in this array 
     if(part_id == familyType[family][j].partID) return family; 
    } 
    } 
    return false; 
} 

ValidateModelList("2630_H", "S900_Aru"); 

ValidateModelList("S600_Aru", "S900_Aru"); 

https://jsfiddle.net/Ladmwdvt/4/

+0

嗨,非常感謝..如果我們有list_id列表的數組列表.....我們如何檢查是否所有屬於同一個家庭或不是。 –