**已关闭。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想要改进此问题?**更新问题,使其位于堆栈溢出主题上。
昨天关门了。
改进这个问题
我的本地存储中有多维数组,带有ID或产品,我正在尝试从多维数组的特定索引中删除一个项。例如:
我有一个带有值的多维数组:
[[12, 12, 537, 24], [63, 36, 26, 26], [63, 162]]
现在,我只想删除 26
来自第二个数组的值。如你所见 26
在第二阵法中出现了2次,所以我只想移除一次。
我的代码:
// 26
const product_id = parseInt(self.parent().data('product-id'));
// 1st index, means 2nd array
const box_number = parseInt(self.parents('.boxes-slider--item').data('box'));
let items = JSON.parse(localStorage.getItem('items'));
var myNewArray = items.map(arrayItem => {
arrayItem.filter((item, index) => !(index === box_number && item === product_id))
});
console.log(myNewArray);
我是这样做的,但它并没有删除值 26
从第二阵列。
我该怎么做?我在谷歌上搜索了很多, splice, filter etc
,但对我来说没有什么是完美的。它们仅适用于单个阵列。我无法实现它的多维数组。
有人能帮我吗?
更新:明天,很少有人发布他们的答案,他们不明白我想说什么,所以他们给了我的问题减号投票。那很好。
答案 Reporter
用户发布是有效的,但它也删除了其他值,如果有另一个相同的id。所以,我改进了代码,现在一切都很好。我还用最新的代码更新了他的(帖子)答案,这些代码运行得非常好。
我的工作代码:
// selected product id which user wants to remove from the list of products
const product_id = parseInt(self.parent().data('product-id'));
// selected div's index, so no other's index value can be removed
// Position will be same in array also.
const product_index = parseInt(self.parent().data('index'));
// Box number will be the index of array
const box_number = parseInt(self.parents('.boxes-slider--item').data('box'));
let items = JSON.parse(localStorage.getItem('items'));
for (let i = 0; i < items.length; i++) {
if (this.isInArray(items[box_number], product_id)) {
items[box_number] = this.removeElementFromArray(items[box_number], product_id, product_index);
// I am breaking it to remove only one
break;
}
}
console.log(items);
localStorage.setItem('items', JSON.stringify(items));
isInArray(sourceArray, lookedValue) {
return sourceArray.includes(lookedValue);
}
removeElementFromArray(arrayObj, arrayValue, product_index) {
let pos = arrayObj.indexOf(arrayValue);
if (pos > -1) {
arrayObj.splice(product_index, 1);
}
return arrayObj;
}
3条答案
按热度按时间rhfm7lfc1#
您需要进行两次迭代以转到2d数组的每个索引并删除所需的元素:
pxy2qtax2#
Map嵌套数组(n),找到第一个匹配项并将其删除。返回嵌套数组以更新多维数组:
ht4b089n3#
一种方法,只需少量代码线: