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

时间:2013-11-08 21:23:37

标签: javascript jquery arrays jquery-plugins

我正在编写一个jQuery插件,使用典型的$.extend方案将用户设置与默认值合并,如:

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

是否有一种快速的方法来确保padding始终是一个4个成员的整数数组,尊重用户的正确参数,但忽略/清理错误的类型参数?

2 个答案:

答案 0 :(得分:1)

不,在扩展默认值之前,您必须检查options的有效性。所以没有“迅捷的方式”。

然而,我会选择四个单独的属性来使代码更具可读性(哪个索引是填充;顶部,左侧,右侧,底部?)并解决您的问题......

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

答案 1 :(得分:0)

我最终得到了以下代码,到目前为止一切正常:

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;
}