![](/img/trans.png)
[英]How to include “require” in PhpStorm for my JavaScript code?
[英]How to use include in javascript in my code?
來自 API 的 groupMapdata 即將到來
[
{
"menu_id": 1666667,
"menu_name_message_id": "menuName.viewgroups",
"access_role_ids": "1,3"
},
{
"menu_id": 1666668,
"menu_name_message_id": "menuName.creategroup",
"access_role_ids": "4,3,2,1"
}
]
checked = { groupMapData.length ? this.checkboxfunction("menuName.creategroup", 2, groupMapData) : false }
我已將復選框函數編寫為:
checkboxfunction = (menuname,role,data) => {
return (data.includes(menuname) && data.includes(role))
}
現在它希望復選框函數返回為真。
這該怎么做?
如果您希望 data 中的至少一個對象包含至少一個屬性,您可以使用以下代碼
return (data.some(x=>x.menu_name_message_id = menumenuname) && data.some(x=>(x.roleId || '').indexOf(ole)!= -1)
如果您希望至少一個對象同時包含新名稱和角色,您可以使用
return (data.some(x=>x.menu_name_message_id = menumenuname) && (x.roleId || '').indexOf(ole)!= -1)
您應該使用Array.prototype.some
來檢測至少一個匹配項的存在。
此外, Array.prototype.includes
不會定位數字的整數版本; 在檢查之前,您需要將角色 ID 映射/解析為整數。
const checkboxFn = (menuName, role, menus) => {
return menus.some(menu => {
let nameMatches = menu['menu_name_message_id'] === menuName,
roleIncluded = menu['access_role_ids'].split(',')
.map(n => parseInt(n, 10))
.includes(role)
return nameMatches && roleIncluded
})
}
const groupMapData = [{ "menu_id": 1666667, "menu_name_message_id": "menuName.viewgroups", "access_role_ids": "1,3" }, { "menu_id": 1666668, "menu_name_message_id": "menuName.creategroup", "access_role_ids": "4,3,2,1" }] const checkboxFn = (menuName, role, menus) => { return menus.some(menu => menu['menu_name_message_id'] === menuName && menu['access_role_ids'].split(',').map(n => parseInt(n, 10)).includes(role)) } let checked = groupMapData.length ? checkboxFn("menuName.creategroup", 2, groupMapData) : false console.log(checked) // true
.as-console-wrapper { top: 0; max-height: 100% !important; }
Array.prototype.includes()
只是對每個元素執行表面級別的比較。 對於對象,除非它們共享相同的引用,否則這將始終返回false
。
// Array.prototype.includes() Example
const x = {}
const y = [x]
y.includes(x) // true
y.includes({}) // false
Array.prototype.some()
更適合比較嵌套屬性。
// Array.prototype.some() Example
const input = [
{menu_id: 1666667, menu_name_message_id: 'menuName.viewgroups', access_role_ids: '1,3'},
{menu_id: 1666668, menu_name_message_id: 'menuName.creategroup', access_role_ids: '4,3,2,1'}
]
const dataIncludesMenuNameAndRole = (data, menuName, role) => {
const dataIncludesMenuName = data.some(element => element.menu_name_message_id === menuName)
const dataIncludesRole = data.some(element => element.access_role_ids === role)
return dataIncludesMenuName && dataIncludesRole
}
注意,這兩種算法都不會檢查同一元素是否包含兩個值的匹配道具,只是這些值作為數組中元素的道具存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.