为了账号安全,请及时绑定邮箱和手机立即绑定

在下拉列表取消选择时更改对象数组中的值

在下拉列表取消选择时更改对象数组中的值

慕容森 2022-08-18 15:44:22
我想根据下拉列表中的选择来更改对象数组中的值。arr= [        {name: 'one', in_order: true, other_key:'ga'},        {name: 'one', in_order: true, other_key:'gb'},        {name: 'one', in_order: true, other_key:'gc'},        {name: 'two', in_order: false, other_key:'gd'},        {name: 'two', in_order: false, other_key:'ge'},        {name: 'two', in_order: false, other_key:'gf'},        {name: 'three', in_order: false, other_key:'gg'},        {name: 'three', in_order: false, other_key:'gh'},        {name: 'three', in_order: false, other_key:'gi'},        {name: 'four', in_order: false, other_key:'gj'},        {name: 'four', in_order: false, other_key:'gk'},        {name: 'four', in_order: false, other_key:'gl'}     ]我这样做了:$(`#filter`).on('change', function() {   yo = [];   $('option:selected', this).each(function() {        yo.push(this.value);   });  arr.forEach(arr_opts => {            yo.forEach(opt => {                if (arr_opts.name == opt) {                    arr_opts.in_order = true;                }            });        });        console.log(arr);});我这样做,我得到我的结果。但是当我在下拉列表中取消选择结果时,它不会变回false。例如,如果我检查和.它将数组中两者的 in 值更改为 。但是,如果我随后取消选择 ,则保持为 。onetwotruetwotwotrue取消选择后,是否可以将所选值更改回 ?false
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

我用它解决了这个问题$.inArray


arr= [

        {name: 'one', in_order: true, other_key:'ga'},

        {name: 'one', in_order: true, other_key:'gb'},

        {name: 'one', in_order: true, other_key:'gc'},

        {name: 'two', in_order: false, other_key:'gd'},

        {name: 'two', in_order: false, other_key:'ge'},

        {name: 'two', in_order: false, other_key:'gf'},

        {name: 'three', in_order: false, other_key:'gg'},

        {name: 'three', in_order: false, other_key:'gh'},

        {name: 'three', in_order: false, other_key:'gi'},

        {name: 'four', in_order: false, other_key:'gj'},

        {name: 'four', in_order: false, other_key:'gk'},

        {name: 'four', in_order: false, other_key:'gl'}

     ]

console.log(arr);


let yo;

$(`#filter`).on('change', function() {

   yo = [];

   $('option:selected', this).each(function() {

        yo.push(this.value);

   });

   

 console.log(yo);


  arr.forEach(arr_opts => {

        if ($.inArray(arr_opts.name, yo) !== -1) {

        arr_opts.in_order = true;

    } else {

        arr_opts.in_order = false;

    }

  });

  console.log(arr);

});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<select id='filter' multiple>

  <option value='one' selected>one</option>

  <option value='two'>two</option>

  <option value='three'>three</option>

  <option value='four'>four</option>

</select>


查看完整回答
反对 回复 2022-08-18
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信