簡體   English   中英

如何在我的代碼中使用包含在 javascript 中?

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

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