美文网首页
JS 小练习

JS 小练习

作者: Cause_XL | 来源:发表于2017-07-03 18:46 被阅读0次

JS 小练习

数组深度拷贝

在JS中,对于对象类型的变量的引用是通过类似C之类的“指针”的方式来操作的,及如果多个变量引用同一个对象,则任意一个变量对对象的操作都会影响到其它的变量。因此如果要创建一个与已经存在的对象内容相同的对象,不能通过简单的赋值操作。

var a=[1,2,3,4];
var b=a;
a.pop();
alert(a); //弹出1,2,3
alert(b); //弹出1,2,3

方法一 (性能低)

Array.prototype.clone = function(){
  var a=[];
  for (var i = 0, l = this.length; i < l; i++) {
    a.push(this[i]);
    return a;
  }
}

方法二

Array.prototype.clone = function() {
  return this.slice(0);
}

方法三

Array.prototype.clone = function() {
  return [].concat(this);
} //或者 Array.prototype.clone=function(){ return this.concat(); }

对象深度克隆

function cloneObject(obj) {
  var o = obj.constructor === Array ? [] : {};

  for (var i in obj) {
    if ( obj.hasOwnProperty(i) ) {
      o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i];
    }
  }
  return o;
}

数组拍平

1、递归

var result = []
function unfold(arr){
     for(var i=0;i< arr.length;i++){
      if(typeof arr[i]=="object" && arr[i].length>1) {
       unfold(arr[i]);
     } else {        
       result.push(arr[i]);
     }
  }
}
var arr = [1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];
unfold(arr)

2、使用tostring

var c=[1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];
var b = c.toString().split(',')

3、使用es6的reduce函数

var arr=[1,3,4,5,[6,[0,1,5],9],[2,5,[1,5]],[5]];
const flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
var result = flatten(arr);

相关文章

  • JS小练习

  • JS 小练习

    JS 小练习 数组深度拷贝 在JS中,对于对象类型的变量的引用是通过类似C之类的“指针”的方式来操作的,及如果多个...

  • 「JS」练习 · 小案例练习

    目录 在浏览器输出以下内容 求1-100的素数 求最大值 数组排序 过滤器 附录:TypeScript一些知识 代...

  • JS作用域的练习

    Js作用域练习demo1 Js作用域练习demo2 JS作用域练习demo3 JS作用域练习demo4 JS作用域...

  • JS的基本小结

    JS基本输出方式 JS数据类型 变量 常量 变量常量小练习 声明提前 隐式转换 显示转换/强制转换

  • JS + Git 测试小练习

    作业链接 js 基础练习js 扩展练习(section-1 & section-2) 提交记录 练习收获 这次作...

  • vue.js小练习

    效果图: 点击前: body部分: js部分: css部分:

  • js基础小练习1

    评分 五星评分基本练习,鼠标移入移出后记录当前点击确定后是几星 上面是css很简单的样式,默认颜色是.5的黑色,当...

  • JS操作属性、函数

    JS操作style属性 JS操作class属性 函数 匿名函数 函数传参 作业 if练习 switch练习

  • js运动框架的小练习

网友评论

      本文标题:JS 小练习

      本文链接:https://www.haomeiwen.com/subject/ncezcxtx.html