从多维数组的特定数组中删除值-javascript

bxpogfeg  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(333)

**已关闭。**此问题不符合堆栈溢出准则。它目前不接受答案。
**想要改进此问题?**更新问题,使其位于堆栈溢出主题上。

昨天关门了。
改进这个问题
我的本地存储中有多维数组,带有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;
}
rhfm7lfc

rhfm7lfc1#

您需要进行两次迭代以转到2d数组的每个索引并删除所需的元素:

const products = [[12, 12, 537, 24], [63, 36, 26, 26], [63, 162]]

// First iteration
products.forEach((row, i) => {
  // Second iteration
  row.forEach((e, j) => {
    // If you find the number
    if (e === 36){
      // Use splice to remove the element
      products[i].splice(j, 1);
    }
  });
});

console.log(products);
pxy2qtax

pxy2qtax2#

Map嵌套数组(n),找到第一个匹配项并将其删除。返回嵌套数组以更新多维数组:

array = [[12, 12, 537, 24], [63, 36, 26, 26], [63, 162]]
array.map(n => {
    index = n.findIndex(o => o === 36)
    n.splice(index, 1)
    return n
})
ht4b089n

ht4b089n3#

一种方法,只需少量代码线:

const bla = [[12, 12, 537, 24], [63, 36, 26, 26], [63, 162]];
const valueShouldRemove = 26;
const index_of_item = 1;

function isInArray(sourceArray, lookedValue)
{
    //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
    return sourceArray.includes(lookedValue);
}

function removeElementFromArray(arrayObj, arrayValue, index_of_item) {
    //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
    let pos = arrayObj.indexOf(arrayValue);
    if (pos > -1) {
        // https://stackoverflow.com/questions/5767325/how-can-i-remove-a-specific-item-from-an-array
        // The index_of_item value will remove the exact box in the array which the user has clicked
        arrayObj.splice(index_of_item, 1);
    }
    return arrayObj;
}

for (i = 0; i < bla.length; i++)
{
    if (isInArray(bla[i], valueShouldRemove)) {
        bla[i] = removeElementFromArray(bla[i], valueShouldRemove, index_of_item);
        // Break the loop if loop finds the value, so the loop will not run anymore.
        break;
    }
}

相关问题