簡體   English   中英

如果值相等,則映射整個數組

[英]map whole array if value equal

我想映射一個數組,如果其中一個值等於變量,那么我將更改此數組中所有對象的isChecked鍵。 例如

輸入數組:

[
  [
    {
      "name": "size",
      "value": "XS",
      "isChecked": false
    },
    {
      "name": "colors",
      "value": "black",
      "isChecked": false
    }
  ],
  [
    {
      "name": "size",
      "value": "XXXL",
      "isChecked": false
    },
    {
      "name": "colors",
      "value": "brown",
      "isChecked": false
    }
  ],
  [
    {
      "name": "size",
      "value": "S",
      "isChecked": false
    },
    {
      "name": "colors",
      "value": "green",
      "isChecked": false
    }
  ]
]

輸入值:黑色

輸出:

[
  [
    {
      "name": "size",
      "value": "XS",
      "isChecked": true
    },
    {
      "name": "colors",
      "value": "black",
      "isChecked": true
    }
  ],
  [
    {
      "name": "size",
      "value": "XXXL",
      "isChecked": false
    },
    {
      "name": "colors",
      "value": "brown",
      "isChecked": false
    }
  ],
  [
    {
      "name": "size",
      "value": "S",
      "isChecked": false
    },
    {
      "name": "colors",
      "value": "green",
      "isChecked": false
    }
  ]
]

也許我應該使用一些回調,答應嗎? 如何映射這個數組? 我必須以某種方式回到我錯過的價值。 在這種情況下,如果找到數組中的值,則該數組中的所有元素都應標記為isChecked = true。

我現在有這樣的事情:

this.allVariants.map((variant, key) => {

                return variant.map((opts, k) => {

                    if (opts.value == val && !opts.isChecked) {
                        let mapped = variant.map(op => op.isChecked = true);
                    } else {
                        let mapped = variant.map(op => op.isChecked = false);
                    }

                    return opts
                })
            })

您可以使用map方法和some內部方法來檢查元素是否存在於子數組中。

 const data = [[{"name":"size","value":"XS","isChecked":false},{"name":"colors","value":"black","isChecked":false}],[{"name":"size","value":"XXXL","isChecked":false},{"name":"colors","value":"brown","isChecked":false}],[{"name":"size","value":"S","isChecked":false},{"name":"colors","value":"green","isChecked":false}]] const res = data.map(arr => { const check = arr.some(({value}) => value == 'black'); return check ? arr.map(e => ({...e, isChecked: true})) : arr }) console.log(res) 

也許您正在尋找這樣的東西? 如您所見,有一個簡單的map函數,它將根據輸入到函數中的內容返回相關值的數組。 只要find函數不返回null,它將簡單地映射提供的錯誤並更新相關對象。

它通過查看所提供的值可以嵌套數組中通過使用發現實現這一found ,我已經實現的功能,提供了這個返回true,則它將使用mutate函數。 這樣的想法是,您將來可能希望進一步更改給定對象的不同屬性,因此為什么它具有專用功能。

我的答案與@NenadVracar相似,只是我將其分解為多個占用一行的函數。

 let data = [[{name:"size",value:"XS",isChecked:!1},{name:"colors",value:"black",isChecked:!1}],[{name:"size",value:"XXXL",isChecked:!1},{name:"colors",value:"brown",isChecked:!1}],[{name:"size",value:"S",isChecked:!1},{name:"colors",value:"green",isChecked:!1}]]; // A function that states if relevant object with value exists. let found = v => a => a.some(({value}) => value == v); // A function used to return data that has been changed, specifically isChecked = true. let mutate = a => a.map(i => ({...i, isChecked: true})); // A function to return the desired array, takes an array and a value. let map = v => a => a.map(o => found(v)(o) ? mutate(o) : o); console.log(map('black')(data)); 

暫無
暫無

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

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