如何在javascript中使用json对象删除对象的json数组?
我正在使用react native cli构建应用程序。我已将所需数据存储在变量中。对于删除不需要的购物车,我传递了与元素绑定的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
[
{
"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");
}