如何在javascript中使用json对象删除对象的json数组?

如何在javascript中使用json对象删除对象的json数组?,javascript,react-native,Javascript,React Native,我正在使用react native cli构建应用程序。我已将所需数据存储在变量中。对于删除不需要的购物车,我传递了与元素绑定的json对象。不幸的是,数据没有被删除 我的数据:- [ { "ProdID":306, "ProdName":"Freezing Choc", "ProdImage":"./Source/Product/2_20190131_101857.png", "ProdVar":[ ], "Qua

我正在使用react native cli构建应用程序。我已将所需数据存储在变量中。对于删除不需要的购物车,我传递了与元素绑定的json对象。不幸的是,数据没有被删除

我的数据:-

[
   {
      "ProdID":306,
      "ProdName":"Freezing Choc",
      "ProdImage":"./Source/Product/2_20190131_101857.png",
      "ProdVar":[

      ],
      "Quantity":1
   },
   {
      "ProdID":307,
      "ProdName":"Bandung",
      "ProdImage":"./Source/Product/3_20190131_101912.png",
      "ProdVar":[

      ],
      "Quantity":1
   },
   {
      "ProdID":308,
      "ProdName":"Hawaiian Breeze",
      "ProdImage":"./Source/Product/4_20190131_102006.png",
      "ProdVar":[

      ],
      "Quantity":3
   }
]
我的剧本:-

removeBtns(item) {
    return [
      {
        text: <Icon name='trash' style={{ fontSize: 15 }} />,
        onPress: () => this.Func_RemoveSelectedCart(item),
        type: 'delete',
      }
    ]
}
Func_RemoveSelectedCart = async (item) => {
    try {
      console.log('ITEM TO REMOVE: ' + JSON.stringify(item));
      await this._onAwaitAlert().then((response) => {
        if (response === 'OK') {
          delete appGlobal.ObjProduct[item];
          console.log('AFTER REMOVE: ' + JSON.stringify(appGlobal.ObjProduct));
        }
      })
        .catch(e => {
          console.log('promise catch ' + e);
        });
    } catch (e) {
      console.log('Unable to remove selected cart. ' + e);
    }
}
renderProductList() {
    var contents = this.state.prodData.map((item) => {
      return (
        <Content key={item.ProdID}>
          <Swipeout right={this.removeBtns(item)}>
            <Card>
              <CardItem>
                .
                .
                .
                .
              </CardItem>
            </Card>
          </Swipeout>
        </Content>
      );
    });
    return (
      <Content padder>
        {contents}
      </Content>
    )
}

您需要获取ObjProduct数组中item的索引,并在删除元素时使用该索引。不能将项用作数组索引

var index = appGlobal.ObjProduct.findIndex(e => e.ProdID = item.ProdID);
if (index != -1) {
    appGlobal.ObjectProduct.splice(index, 1);
} else {
    console.log("Item not found in appGlobal.ObjProduct");
}

您还应该使用splice来删除数组元素,而不是删除,以便重新为数组编制索引。

您需要使用array.prototype.findIndex方法来获取要在delete-appGlobal.ObjProduct[index]中使用的元素索引@Barmar,你的意思是当我映射到render时,我传递的是元素的索引而不是项本身吗?你已经删除了appGlobal.ObjProduct[item]。项是一个对象,而不是数组索引。是的,我必须按照您的建议使用带索引的拼接。delete是使json变为null,而不是删除它,例如产品:[{ProdID:306…etc},null,null,{ProdID:309…etc},{ProdID:312…etc},{ProdID:313…etc}]
var index = appGlobal.ObjProduct.findIndex(e => e.ProdID = item.ProdID);
if (index != -1) {
    appGlobal.ObjectProduct.splice(index, 1);
} else {
    console.log("Item not found in appGlobal.ObjProduct");
}