js数组基础方法-slice

根据ECMA标准,简单模拟出slice方法的定义:

function ArraySlice(start, end) {
  var array = Object(this);
  var len = array.length;
  var start_i = Number(start);
  var end_i = len;
  if (!IS_UNDEFINED(end)) end_i = TO_INTEGER(end);
  if (start_i < 0) {
    start_i += len;
    if (start_i < 0) start_i = 0;
  } else {
    if (start_i > len) start_i = len;
  }
  if (end_i < 0) {
    end_i += len;
    if (end_i < 0) end_i = 0;
  } else {
    if (end_i > len) end_i = len;
  }
  var result = new constructor(MaxSimple(end_i - start_i, 0));
  if (end_i <= start_i) return result;
  for (var i = 0; i < end_i - start_i; i++) {
    var index = start_i + i;
    if (index in array) {
      var current = array[index];
      result[i]= current;
    }
  }
  result.length = end_i - start_i;
  return result;
}

所以关于将类数组对象转换为数组的方法,可以用

[].slice.call(Array-like-object)
或者
Array.property.slice.call(Array-like-object)
// [].slice === Array.property.slice   true

slice方法本质上是获取数组或类数组的length,再结合start、end参数生成一个新的数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值