簡體   English   中英

從多維數組中刪除匹配的字符串項

[英]Removing a matching string item from a multidimensional array

我有一個從復選框值派生的多維數組,對於外部數組的所有實例,它們可以具有相同的字符串。

示例數組:

[
    ['One', 'Two', 'Three'],
    ['One', 'Two', 'Three'],
    ['One', 'Two', 'Three'],
]

當我調用該函數時,我傳遞了一個索引號,該索引號表示我要處理的內部數組之一。 例如,如果用戶在 1 索引中取消選中表示“二”的復選框,我希望多維數組更改為此。

 [
        ['One', 'Two', 'Three'],
        ['One', 'Three'],
        ['One', 'Two', 'Three'],
 ]

我在編寫這個函數時遇到了麻煩。 這是在 React 中,解決這個問題的代碼片段目前是這樣的:

setCheckedValues(prevArray => {
          const newItemArray = prevArray.slice()
          const newItemArrayFiltered = [...newItemArray, newItemArray[index].filter(name => name !== event.target.name)]
          return newItemArrayFiltered
        })

我已經進行了很多搜索,並且對如何僅在一個內部數組中刪除字符串感到困惑。 感謝您的幫助!

處理這個問題的一個相當標准的方法是在索引周圍slice()

setCheckedValues(prevArray => {
  return [
    ...prevArray.slice(0, index),
    prevArray[index].filter(name => name !== event.target.name),
    ...prevArray.slice(index + 1)
  ];
});

另一種方法是在數組上使用map()檢查匹配的索引並適當地返回更新的值。

setCheckedValues(prevArray => prevArray
  .map((arr, i) =>
    i === index
      ? arr.filter(name => name !== event.target.name)
      : arr
  )
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM