2

chmod と同様に、通知の方法として 1、2、4 を使用したいと思います。

1 = Email 
2 = SMS 
4 = Push notifications

数値(上記)を入力でき、次のオブジェクトを返すことができる関数(できればjavascript)はありますか?

{
    email: true,
    sms: true,
    push: false
}

関数をハードコーディングしないでほしい。すべての組み合わせをチェックする一連の if ステートメントは必要ありません。私はそれを行うための「賢い」方法が欲しい。

4

3 に答える 3

2

次のようにしてみてください。申し訳ありませんが、これは Python ですが、JavaScript の翻訳は非常に似ているはずです。

def notifications(mask):
    return {
        'email' : mask & 4 != 0,
        'sms'   : mask & 2 != 0,
        'push'  : mask & 1 != 0
    }

notifications(0b111) # same as notifications(7), or notifications(email+sms+push)
=> {'push': True, 'sms': True, 'email': True}

上記では、通知のバイナリ ビット マスクが0b111(基数 10 を使用する場合は 7) であると言っています。これは、3 つの通知すべてが有効になっていることを意味します。同様に、ビット マスク0b010(または基数 10 の 2) として渡した場合、答えは次のようになります。

notifications(0b010) # same as notifications(2), or notifications(sms)
=> {'push': False, 'sms': True, 'email': False}
于 2013-03-21T22:54:52.057 に答える
0

関数に送信する複数のパラメーターを持つソリューション:

var states = {
  '1': 'email',
  '2': 'sms',
  '4': 'push'
};

function getStates(){
 var o = {};
 for(var val in states){
   o[states[val]] = false;   
 }

   for(var i=0;i<arguments.length;i++){
     var arg = arguments[i];  
     var state = states[arg];
      if(state){
        o[state] = true;
      }  
  }

  return o;
}

console.log(getStates()); // return {email: false, sms: false, push: false}
console.log(getStates(1,2)); // return {email: true, sms: true, push: false} 

http://jsfiddle.net/ZTA6E/

于 2013-03-21T22:55:51.157 に答える