Javascript 删除地图中的对象时出现问题。我需要回忆这个函数3次
我有一个调用函数findPrice的按钮。我需要调用此函数3次或更多次才能删除所有与price匹配的对象(输入值)。我遇到了bigs maps no witch 2函数的问题 Json格式: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},
[ { _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
);