将结果从Ajax-Request传输到数组的更简洁方法

时间:2017-06-22 07:28:23

标签: javascript jquery arrays json ajax

我目前正处于这种状况。我收到了像这样的AJAX调用的响应

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

现在我想查看我的DOM中的选项,并检查Value-Attributes是否是请求中我的ID的一部分。通常我会创建一个包含所有ID的数组

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

之后,我将迭代选项并删除它们,如果在数组中找不到属性,如

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

然而,我发现它有点不太优雅。我想知道是否有更轻薄的方法来做到这一点。非常感谢帮助。

1 个答案:

答案 0 :(得分:3)

要从数组中获取ID,您可以使用Array#map

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

这将包含数组中的所有ID。

现在,要删除<option>不在上述数组中的value,您可以从数组中创建一个选择器。

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

字符串连接和数组连接将以格式

提供选择器
"option[value="1"].someClass, option[value="2"].someClass, option[value="3"].someClass"

可直接与jQuery一起使用。

&#13;
&#13;
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();
&#13;
<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>
&#13;
&#13;
&#13;