我在角度JS项目中将json数据放在文件(/static/models.json)中。
{
"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 )属于同一个家庭(即 A650 或 S400 )
如果两个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属于同一个
你能帮忙解决这个问题吗......非常感谢你提前......答案 0 :(得分: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
}
}
}
答案 1 :(得分: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");
答案 2 :(得分:0)
虽然不清楚你的问题,但下面是你要检查的方法。
Object.keys(type.familyType).forEach(function(key,index) {
if(key === Part_id1 || key === Part_id2){
//do something
} else {
//do something else
}
});
玩弄小提琴。
答案 3 :(得分: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>
答案 4 :(得分: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');
}