用户取消选择平面清单项目时删除项目

时间:2020-08-04 23:25:00

标签: javascript arrays react-native object

我知道标题不够清楚,但是我会在这里尝试解释更多。 我有一个清单,必须选择多个Items并创建一个字符串值,其中包含必须发送到服务器的ID和价格。 这是我的方法:(工作正常)

  selectItem = data => {
    let test = 130;
    if (data.Unites < test) {
      data.Etat = 0
      console.warn('points insufisants');
    } else {
      data.isSelect = !data.isSelect;
      data.selectedClass = data.isSelect ? StylesGift.validChek : StylesGift.inValidChek;
      const newItem = {
        idCadeau: data.idCadeau,
        Unites: data.Unites,
      };

      if (data.isSelect) {
        const index = this.state.paramsSend.indexOf([newItem]);

        this.setState({
          paramsSend: this.state.paramsSend.concat([newItem]),
        }, () => {
          let str = this.state.paramsSend.map(v => Object.values(v).join('_')).join(',')
          this.setState({
            params: str,
          });
        });
      }else if (data.isSelect === false) {
        const index = this.state.paramsSend.indexOf([newItem]);
        if (index > -1) {
          array.splice(index, 1);
          let str = this.state.paramsSend.map(v => Object.values(v).join('_')).join(',')
          this.setState({
            params: str,
          });
        }

   

        console.log('looog' + this.state.paramsSend);
      }
    }
    this.setState({changed: !this.state.changer})

  };

我的问题是,当我取消选择商品时,无法使用以下代码删除该商品的ID和价格:

    else if (data.isSelect === false) {
        const index = this.state.paramsSend.indexOf([newItem]); <-- =-1
        if (index > -1) {
        this.state.paramsSend.splice(index, 1);
let str=this.state.paramsSend.map(v=>Object.values(v).join('_')).join(',')
              this.setState({
                params: str,
              });
            }
            console.log('looog' + this.state.paramsSend);
          }

有什么建议吗? indexOf返回-1 我不知道为什么

const index = this.state.paramsSend.indexOf([newItem]);
console.warn('index ' + index);
console.warn('from this ' +JSON.stringify(this.state.paramsSend));
console.warn('remove this ' + JSON.stringify(newItem));

newItem已经在paramsSend中,但返回-1! enter image description here

2 个答案:

答案 0 :(得分:1)

您有2个问题:

  1. 不要用数组调用(function () { var active = ""; $('button').on('click', function (e) { var id = "#" + e.target.value; $(active).html(""); active = id; $(id).html("button was clicked"); }); })();,而要使用您要查找的元素:<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <!-- this button has default style --> <button value="action">Action</button> <label id="action"></label> <button value="action1">Action</button> <label id="action1"></label>
  2. 仅当indexOf参数是数组中的实际对象而不是副本时,在对象数组上调用的
  3. const index = this.state.paramsSend.indexOf(newItem);才有效。即,这将无法工作:indexOf(item)即使数组中存在相同的对象

所以这应该解决两个问题:

item

答案 1 :(得分:0)

您的代码不是很清楚,但是请尝试使用过滤器功能。

它将符合条件的所有元素压入数组

const newDataArray = data.filter(elem => elem.idCadeau !== newItem.idCadeau)

所以在这里,您有一个新数组,其中所有元素都与您的newItem不同