2017-06-22 48 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>