gpt4 book ai didi

javascript - 当我删除 map 中的对象时出现问题。我需要调用函数 3 次

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:08 24 4
gpt4 key购买 nike

我有一个调用 findPrice 函数的按钮。我需要调用此函数 3 次或更多次以删除所有匹配价格与 priceSearch(输入值)的对象我有 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 }, ]

我想我对 map 的索引有疑问。当我删除 map 的 1 个对象但没有成功时,我尝试放置 i--。

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);

编辑:

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

for (let i = arrayOfObjects.length - 1; i >= 0; i--) {
if (arrayOfObjects[i].positionDetail.price === priceSearch) {
arrayOfObjects.splice(i, 1);
}
}

通常使用 filter 在性能方面更好,因为原始数组没有被修改。

编辑 2:

data.positionDetail 是一个数组?嗯...你为什么不这么说 :) 试试这个:

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

内部过滤器过滤positionDetail数组:如果结果为空,则没有price = priceSearch,所以你丢弃外部对象。

关于javascript - 当我删除 map 中的对象时出现问题。我需要调用函数 3 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com