亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

確定一個對象是否具有與 true 相同的鍵

確定一個對象是否具有與 true 相同的鍵

侃侃爾雅 2023-06-29 22:24:17
我想要一個函數,它接受一系列操作,將其與用戶操作列表進行比較,然后返回用戶是否可以執行該操作?;旧?,給出:const usersActions: { [key: string]: {[key: string]: boolean} } = {      Bob: { eat: false, drink: false, sleep: true, walk: true },      Alice: { eat: true, drink: true, sleep: true, walk: false }};如果 Bob 或 Alice 可以執行一組特定的函數,該函數就會返回。enum Actions{    Eat= 'eat',    Drink= 'drink',    Sleep= 'sleep',    Walk= 'walk'}const verifyActions = (name: string, actions: Array<Actions>) => {    return actions.every((action) => {        return usersActions[name][action];    });}console.log(verifyActions('Bob', [Actions.Eat, Actions.Sleep])); // falseconsole.log(verifyActions('Bob', [Actions.Sleep, Actions.Walk])); // trueconsole.log(verifyActions('Alice', [Actions.Drink, Actions.Eat, Actions.Sleep])); // trueconsole.log(verifyActions('Alice', [Actions.Sleep, Actions.Walk])); // false這完全按照我所描述的方式工作,但我忍不住認為有一種更好的方法可以做到這一點,例如比較數組與對象,也許是 Lodash 的單行代碼?這讓我的大腦有點困惑,并讓我有一種揮之不去的感覺,認為還有更優雅的方法。
查看完整描述

1 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

您的函數簡單易讀,只需刪除大括號和return:


const usersActions = {

  Bob: { eat: false, drink: false, sleep: true, walk: true },

  Alice: { eat: true, drink: true, sleep: true, walk: false }

};


const Actions = {

  Eat: 'eat',

  Drink: 'drink',

  Sleep: 'sleep',

  Walk: 'walk'

}


const verifyActions = (name, actions) => actions.every((action) => usersActions[name][action]);


console.log(verifyActions('Bob', [Actions.Eat, Actions.Sleep])); // false

console.log(verifyActions('Bob', [Actions.Sleep, Actions.Walk])); // true

console.log(verifyActions('Alice', [Actions.Drink, Actions.Eat, Actions.Sleep])); // true

console.log(verifyActions('Alice', [Actions.Sleep, Actions.Walk])); // false

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>


使用 lodash,您可以從對象中選取所有操作userActions[name],然后檢查是否所有操作都在true使用_.every(). 然而,這并沒有使它更具可讀性或更短。


const usersActions = {

  Bob: { eat: false, drink: false, sleep: true, walk: true },

  Alice: { eat: true, drink: true, sleep: true, walk: false }

};


const Actions = {

  Eat: 'eat',

  Drink: 'drink',

  Sleep: 'sleep',

  Walk: 'walk'

}


const verifyActions = (name, actions) => _.every(_.pick(usersActions[name], actions))


console.log(verifyActions('Bob', [Actions.Eat, Actions.Sleep])); // false

console.log(verifyActions('Bob', [Actions.Sleep, Actions.Walk])); // true

console.log(verifyActions('Alice', [Actions.Drink, Actions.Eat, Actions.Sleep])); // true

console.log(verifyActions('Alice', [Actions.Sleep, Actions.Walk])); // false

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>



查看完整回答
反對 回復 2023-06-29
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號