Javascript 删除地图中的对象时出现问题。我需要回忆这个函数3次

Javascript 删除地图中的对象时出现问题。我需要回忆这个函数3次,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个调用函数findPrice的按钮。我需要调用此函数3次或更多次才能删除所有与price匹配的对象(输入值)。我遇到了bigs maps no witch 2函数的问题 Json格式: [ { _id: 5c6c408dbec3ab457cf5bdfb, date: 2019-02-19T00:00:00.000Z, user: 5c30fd5890bbd24a1c46c7ee, positionDetail: [ { quantity: 2, price:22},

我有一个调用函数findPrice的按钮。我需要调用此函数3次或更多次才能删除所有与price匹配的对象(输入值)。我遇到了bigs maps no witch 2函数的问题

Json格式:

[ { _id: 5c6c408dbec3ab457cf5bdfb,
    date: 2019-02-19T00:00:00.000Z,
    user: 5c30fd5890bbd24a1c46c7ee,
    positionDetail: [ { quantity: 2, price:22}, { quantity: 3, price:33}, { quantity: 5, price:43}],
    id: 50,
    __v: 0 },
  { _id: 5c6c408dbec3ab457cf5bdfb,
    date: 2019-02-27T00:00:00.000Z,
    user: 5c30fd5890bbd24a1c46c7ee,
    positionDetail: [ { quantity: 3, price:33}, { quantity: 2, price:123}, { quantity: 2, price:11}],
    id: 51,
    __v: 0 }, ]
我想我对地图的索引有问题。我试着把我——当我删除地图的1个obejct时,但没有成功

findPrice() {

    this.arrayOfObjects.forEach( (data, i) => {

        let searchIfExist= data.positionsDetail.findIndex(index1 => index1.price === priceSearch);

        if (searchIfExist=== -1) {

          this.arrayOfObjects.splice( i, 1 );

          i--;
        }

    });
 }

为什么不使用
Array.filter

let filtered = this.arrayOfObjects.filter(data => data.positionDetail.price !== priceSearch);
编辑:

如果要使用splice,请不要在
Array.forEach
中使用它。使用for循环和向后循环(以保留阵列拼接索引)

通常使用
过滤器
性能更好,因为原始数组没有修改

编辑2:
data.positionDetail
是数组吗?好。。。你为什么不这么说:)试试这个:

const filtered = this.arrayOfObjects.filter(data =>
  data.positionDetail.filter(
    priceData => priceData.price === priceSearch
  ).length !== 0
);

内部过滤器过滤
positionDetail
Array:如果结果为空,则没有price=priceSearch,因此放弃外部对象。

使用Array。筛选或查找价格所在的索引!==价格搜索,然后使用拼接方法拼接索引。

您到底面临什么问题?这没有任何意义,“我有大地图的问题,没有巫婆2的功能。”巫婆骑着扫帚!;-)大多数情况下,您不希望在循环数组时修改它。您需要使用不可变数组方法并返回一个新数组。(在下面的答案中过滤、映射等)您不需要拼接。filter返回一个新的数组,但是我已经提到你可以使用array.filter或findIndex,然后我尝试使用filter,但是我遇到了问题,因为我指的是数组的两级对象。我们有主要的目标和位置,我们可以在价格方面有更多的位置。我想在数组中任何位置的价格都不匹配时删除对象。非常有趣,我看到了函数过滤器的示例,但我真的不知道你可以使用2个过滤器进入其他级别。我尝试在循环中这样做,但没有成功,因为只过滤positionDetail而不是对象。非常感谢你
const filtered = this.arrayOfObjects.filter(data =>
  data.positionDetail.filter(
    priceData => priceData.price === priceSearch
  ).length !== 0
);