【问题标题】:ReactNative: I want to remove objects from array in a listReact Native:我想从列表中的数组中删除对象
【发布时间】:2023-03-30 02:50:02
【问题描述】:

这是我的删除项目代码

const list = await AsyncStorage.getItem("ParcelList");

var res = JSON.parse(list);

//it contains array of multiple stored values [{value:{},value:{},value:{},value:{},]

var select = this.state.selectedData;

//this is the selected items I want to delete [{value:{},value:{}}]

 const postsItems = res.filter(item => !select.includes(item));

await AsyncStorage.setItem('ParcelList',JSON.stringify(postsItems));

var resl = await AsyncStorage.getItem('ParcelList',);

请帮我解决这个问题,并为我提供从数组中删除多个对象的解决方案

【问题讨论】:

  • 你能分享value:{ ??? }对象的结构吗?您使用 filter 的方法很好,但您与过滤器对象进行比较的方式不正确。您需要比较对象的属性值。
  • [ { value: { Description: 'Test', Length: '10', Height: '23', Weight: '20', VolumeWeight: 0.92, ActualWeight: '23' }]跨度>
  • 如何将多个对象与原始数据对象进行比较?你能给我一个样品吗?
  • 您想与DescriptionVolumeWeight 等每个对象比较哪个属性?
  • 任一属性或 VolumeWeight

标签: javascript react-native


【解决方案1】:

您可以使用Array.some 作为.filter 谓词来测试多个属性上的对象,例如

var res = [{description: 'ab', VolumeWeight: 0.92}, {description: 'cb', VolumeWeight: 0.90}, {description: 'ab', VolumeWeight: 0.89}]

var selected = [{description: 'ab', VolumeWeight: 0.92}]


var result = res.filter(item => !selected.some(itemToRemove => item.VolumeWeight === itemToRemove.VolumeWeight && item.description === itemToRemove.description));

console.log(result);

在上面的例子中,{description: 'ab', VolumeWeight: 0.92} 将根据descriptionVolumeWeight 属性值从res 数组中过滤出来。您可以在.some 方法中添加任意数量的属性以满足您的要求。

希望这会有所帮助!

【讨论】:

  • 使用somefilter 过滤器会很慢
  • 基于多个属性删除多个元素的任何更好的选择? @JunedLanja
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2021-02-02
  • 2020-09-03
  • 1970-01-01
相关资源
最近更新 更多