基于数组

时间:2018-02-21 18:49:31

标签: javascript arrays object

我有一个对象,它定义了一组最初设置为false的用户权限。我有一个包含多个元素的数组。基于每个元素,我需要更新权限对象。

以下是示例代码。

var environment = 'DEV';

var permissions = {
  superadmin: false,
  admin: false,
  developer: false,
  tester: false,
  general: false,
  grp1: false,
  grp2: false,
  grp3: false,
  grp4: false,
  grp5: false,
  env: environment
};

var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";

var decodeURIUser = decodeURIComponent(user).split(",");

var permissionsArray = _.filter(decodeURIUser, function(s) {
  return s.indexOf('azg_environment_') !== -1;
});


var permissionsList = _.filter(permissionsArray, function(e) {
  return e.indexOf(environment) !== -1
});

console.log(permissionsList);

if (_.some(permissionsList, function(e) {
    return e.indexOf("SuperAdmin") !== -1
  })) {
  permissions.superadmin = true;
  permissions.admin = true;
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Admin") !== -1
  })) {
  permissions.admin = true;
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Developer") !== -1
  })) {
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Tester") !== -1
  })) {
  permissions.tester = true;
}

if (_.some(permissionsList, function(e) {
    return e.indexOf("grp1") !== -1
  })) {
  permissions.grp1 = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("grp2") !== -1
  })) {
  permissions.grp2 = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("grp3") !== -1
  })) {
  permissions.grp3 = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("grp4") !== -1
  })) {
  permissions.grp4 = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("grp5") !== -1
  })) {
  permissions.grp5 = true;
}

if (_.some(permissionsList, function(e) {
    return e.indexOf("General") !== -1
  })) {
  permissions.general = true;
}

console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

该函数不会将grp5更新为true。我如何实现这一目标,以便我的最终目标是

var permissions = {
    superadmin: true,
    admin: false,
    developer: true,
    tester: true,
    general: true,
    grp1: false,
    grp2: false,
    grp3: false,
    grp4: true,
    grp5: true,
    env: environment

};

1 个答案:

答案 0 :(得分:2)

这是因为在进行if(){ .. } else if(){ ... }比较时,您正在进行grp

grp4正在实现,因此不会检查grp5

您只需要多个if

var environment = 'DEV';

var permissions = {
  superadmin: false,
  admin: false,
  developer: false,
  tester: false,
  general: false,
  grp1: false,
  grp2: false,
  grp3: false,
  grp4: false,
  grp5: false,
  env: environment
};

var user = " azg_environment_DEV_grp4%2Cazg_environment_DEV_Admin%2Cazg_environment_DEV_grp5%2Cazg";

var decodeURIUser = decodeURIComponent(user).split(",");

var permissionsArray = _.filter(decodeURIUser, function(s) {
  return s.indexOf('azg_environment_') !== -1;
});


var permissionsList = _.filter(permissionsArray, function(e) {
  return e.indexOf(environment) !== -1
});

console.log(permissionsList);

if (_.some(permissionsList, function(e) {
    return e.indexOf("SuperAdmin") !== -1
  })) {
  permissions.superadmin = true;
  permissions.admin = true;
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Admin") !== -1
  })) {
  permissions.admin = true;
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Developer") !== -1
  })) {
  permissions.developer = true;
  permissions.tester = true;
} else if (_.some(permissionsList, function(e) {
    return e.indexOf("Tester") !== -1
  })) {
  permissions.tester = true;
}

if (_.some(permissionsList, function(e) {
    return e.indexOf("grp1") !== -1
  })) {
  permissions.grp1 = true;
}
if (_.some(permissionsList, function(e) {
    return e.indexOf("grp2") !== -1
  })) {
  permissions.grp2 = true;
}
if (_.some(permissionsList, function(e) {
    return e.indexOf("grp3") !== -1
  })) {
  permissions.grp3 = true;
}
if (_.some(permissionsList, function(e) {
    return e.indexOf("grp4") !== -1
  })) {
  permissions.grp4 = true;
}
if (_.some(permissionsList, function(e) {
    return e.indexOf("grp5") !== -1
  })) {
  permissions.grp5 = true;
}

if (_.some(permissionsList, function(e) {
    return e.indexOf("General") !== -1
  })) {
  permissions.general = true;
}

console.log(permissions);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

FYI在没有大量_.some的情况下,可能有更简单的方法来实现您在此处尝试的操作。想。

更新(一种可能的次要代码优化)

function checkPresence(permissionsList, str){
   _.some(permissionsList, function(e) {
      return e.indexOf("grp1") !== -1
   })
}

现在在您的代码中使用它_.some

if(permissionsList, "General"){
   // ....
}