[英]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.