Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-在确保数组成员完整性的同时扩展对象_Javascript_Jquery_Arrays_Jquery Plugins - Fatal编程技术网

Javascript jQuery-在确保数组成员完整性的同时扩展对象

Javascript jQuery-在确保数组成员完整性的同时扩展对象,javascript,jquery,arrays,jquery-plugins,Javascript,Jquery,Arrays,Jquery Plugins,我正在使用一个典型的$编写一个jQuery插件。扩展场景以合并用户设置和默认设置,如下所示: var settings = $.extend({ title: '', padding: [0,0,0,0] }, options); 有没有一种快速的方法可以确保填充始终是一个由4个成员组成的整数数组,尊重用户的正确参数,但忽略/清除坏类型参数?否,在扩展默认值之前,您必须检查选项的有效性。所以没有“捷径” 不过,我会选择四个独立的属性,以使代码更具可读性(哪个索引

我正在使用一个典型的
$编写一个jQuery插件。扩展
场景以合并用户设置和默认设置,如下所示:

var settings = $.extend({
      title: '',
      padding: [0,0,0,0]
    }, options);

有没有一种快速的方法可以确保
填充
始终是一个由4个成员组成的整数数组,尊重用户的正确参数,但忽略/清除坏类型参数?

否,在扩展默认值之前,您必须检查
选项的有效性。所以没有“捷径”

不过,我会选择四个独立的属性,以使代码更具可读性(哪个索引是哪个填充;top、left、right、bottom?),并解决您的问题

var settings = $.extend({
    title: '',
    paddingLeft: 0,
    paddingTop: 0,
    paddingRight: 0,
    paddingBottom: 0,
}, options);

我最终得到了以下代码,到目前为止,这些代码运行良好:

if (options.padding && $.isArray(options.padding)) {
  var pd = options.padding;
  // Parsing shortcuts.
  switch (pd.length) {
    case 0:
      options.padding = [0,0,0,0];
      break;
    case 1:
      options.padding = [pd[0], pd[0], pd[0], pd[0]];
      break;
    case 2:
      options.padding = [pd[0], pd[1], pd[0], pd[1]];
      break;
    case 3:
      options.padding = [pd[0], pd[1], pd[2], pd[1]];
      break;
    default:
      options.padding = pd.splice(0, 4);
  }

  // Sanitizing values.
  for (var i = 0; i < 4; i++) {
    var pv = options.padding[i];
    switch (typeof pv) {
      case 'number':
        options.padding[i] = Math.floor(pv);
        break;
      default:
        options.padding[i] = 0;
        break;
    }
  }
} else {
  delete options.padding;
}
if(options.padding&&$.isArray(options.padding)){
var pd=options.padding;
//解析快捷方式。
开关(pd.长度){
案例0:
options.padding=[0,0,0,0];
打破
案例1:
options.padding=[pd[0],pd[0],pd[0],pd[0]];
打破
案例2:
options.padding=[pd[0],pd[1],pd[0],pd[1]];
打破
案例3:
options.padding=[pd[0],pd[1],pd[2],pd[1];
打破
违约:
options.padding=pd.拼接(0,4);
}
//消毒值。
对于(变量i=0;i<4;i++){
var pv=期权。填充[i];
开关(pv类型){
案件编号:
选项填充[i]=数学地板(pv);
打破
违约:
选项。填充[i]=0;
打破
}
}
}否则{
删除选项。填充;
}

不,您必须自己完成。您必须自己编写所有验证。一个建议是测试它是否符合您想要的条件,如果它没有将一个错误日志传递到控制台,让开发人员知道它不是正确的,或者如果您不想键入所有的
选项,您可以使用
with
:(注意:通常情况下,您不应该使用
with
,只是说)对于填充选项来说,这是非常多的代码。小心不要编写“只写”的代码。。。