2017-06-22 43 views
1

我目前有這種情況。我收到來自AJAX調用這樣更簡單的方法將Ajax請求的結果傳輸到數組

...responseJSON.d.results : [ 
    { 
     "Title" : "SomeTitle", 
     "Id" : 1 
    }, 
    { 
     "Title" : "SomeOtherTitle", 
     "Id" : 2 
    } 
] 

現在我想通過選擇在我的DOM和檢查值的屬性是我在請求ID的一部分的響應。通常我會通過

var ids = []; 
$.each(response.JSON.d.results, function(){ 
    ids.push(this.Id) 
}); 

之後,我將通過選項進行迭代,並刪除它們創建的所有ID的數組如果數組中沒有找到屬性,如

$.each($('option.someClass'), function(){ 
    if(ids.indexOf(parseInt($(this).attr('value'))) === -1) $(this).remove() 
}); 

但是我發現這有點不雅觀。我想知道是否有更苗條的方式來做到這一點。將不勝感激的幫助。

回答

3

要獲得該數組中的ID,您可以使用Array#map

var ids = response.JSON.d.results.map(o => o.Id); 

這將包含在陣列中的所有ID。

現在,要刪除那些<option> s,其value不在上述數組中,您可以從數組中創建一個選擇器。

$('option.someClass') 
    .not('option[value="' + ids.join('"].someClass, option[value="') + '"].someClass') 
    .remove(); 

字符串連接和陣列加入將在其中可以直接與jQuery使用的格式

"option[value="1"].someClass, option[value="2"].someClass, option[value="3"].someClass" 

給選擇器。

var arr = [{ 
 
    "Title": "SomeTitle", 
 
    "Id": 1 
 
}, { 
 
    "Title": "SomeOtherTitle", 
 
    "Id": 2 
 
}]; 
 

 
var ids = arr.map(o => o.Id); 
 
$('option.someClass') 
 
    .not('option[value="' + ids.join('"].someClass, option[value="') + '"].someClass') 
 
    .remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select> 
 
<option value="1" class="someClass">1</option> 
 
<option value="2" class="someClass">2</option> 
 
<option value="3" class="someClass">3</option> 
 
<option value="4" class="someClass">4</option> 
 
<option value="5" class="someClass">5</option> 
 
</select>