2015-04-01 46 views
0

我從api獲取兩個json數組。數據舉例:AngularJs - 在兩個數組中查找關係信息

意甲類型:

[ 
    {"Id":1,"BetTypeId":1, "NameEng":"Win"}, 
    {"Id":2,"BetTypeId":1,"NameEng":"Draw"} 
] 

投注類型:

[ 
     {"Id":1,"NameEng":"3-Way Result","SportId":1  
     {"Id":2,"NameEng":"Double Chance","SportId":1} 
    ] 

正如你所看到的,意甲類型的對象有BetTypeId。但我需要從數組中遠程注入類型對象,沒有serie類型。

我已經嘗試循環賭類型數組,但我不怎麼過濾serie類型。

實現此目的的步驟是什麼?

+0

請儘量更好地解釋你所擁有的,你想擁有什麼,目前還不清楚你的問題是什麼。另外,這是如何與角? – floribon 2015-04-01 18:10:18

+0

我需要在BetType數組中循環。查找引用BetType對象的SerieType對象,並在沒有引用SerieType的情況下移除BetType對象。我正在使用Angular來做到這一點。 @floribon – Sefa 2015-04-01 18:14:27

+0

您可以使用嵌套的foreach並將您的BetType上匹配的元素拼接起來。 – 2015-04-01 18:19:30

回答

0

遍歷意甲類型的數組,並收集所有BetTypeId的是這樣的:

var betIds = serieType.map(function (serie) { return serie.BetTypeId; }); 

現在你只需要循環雖然BetType陣列並檢查是否有ID爲它的betIds數組中,我們已經得到不已:

betType.filter(function (bet) { 
    return betIds.indexOf(bet.Id) !== -1; 
}); 
+0

如果在循環中拼接數組,您將在'i'和實際索引之間創建一個偏移量。你應該使用'Array.filter'來代替。 – floribon 2015-04-01 18:22:01

+0

你是對的! ;) – getOffMyLawn 2015-04-01 18:24:47

0

可以過濾數組是這樣的:

betTypesArray = betTypesArray.filter(function(bet) { 
    // If a seriesType item references this bet, keep it 
    return seriesTypeArray.some(function(serie) { 
    return serie.BetTypeId === bet.Id; 
    }); 
}); 

這是否解決了您的問題?

0

這是一種場景,您可以在其中看到如何使用filter過濾器兩個數組之間的匹配。能拿使用開源項目的功能filtersome

var things = [ 
    {"id": 123, "name": "thing name"}, 
    {"id": 456, "name": "second thing name"}  
] 

var foo = [ 
    {"id": 333, "thingId": 123}, 
    {"id": 111, "thingId": 787}, 
    {"id": 222, "thingId": 456} 
] 

foo = foo.filter(function (foo) { 
    return things.some(function(thing){ 
    return thing.id == foo.thingId; 
    }); 
}); 
0

容易一些閱讀jinqJs

See Fiddle

var serie = [ 
    {"Id":1,"BetTypeId":1, "NameEng":"Win"}, 
    {"Id":2,"BetTypeId":1,"NameEng":"Draw"} 
]; 

var bet = [ 
     {"Id":1,"NameEng":"3-Way Result","SportId":1}, 
     {"Id":2,"NameEng":"Double Chance","SportId":1} 
    ]; 

var result = jinqJs() 
        .from(serie) 
        .join(bet) 
         .on(function(left, right) {return (left.BetTypeId == right.Id);}) 
        .select('Id', 'BetTypeId', 'NameEng', 'SportId');