Loading

JavaScript数组

1. 数组对象是用来在单独的变量名中存储一系列的值

  var a = [2,6,1];
  var b = a;
  var c = a.sort();
  // b = ? 

 //实现数组的复制  ====>  var b = [].concat(a)

2. 删除数组中的重复对象

var a = [

  { name: 1, age: 12 },
  { obj: 2, age: 1, name: 1 },
  { name: 2, age: 2 }
]

Array.prototype.remove = function (val) {
  var index = this.indexOf(val);
  if (index > -1) {
    this.splice(index, 1);  //params1 代表下标,params2 代表要删除几个元素 
  }
};

var uniqueObj = function (obj) {
  for (var i = 0; i < obj.length; i++) {
    var count = 0;
    for (var j = 0; j < obj.length; j++) {
      if (obj[i].name == obj[j].name) {
        count++;
      }
      if (obj[i].name == obj[j].name) {
        if (count > 1) {
          obj.remove(obj[i]);
        }
      }
    }
  }
  return obj;
}

console.log(uniqueObj(a))

3. 删除数组中的重复元素


var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique(arr){
// 遍历arr,把元素分别放入tmp数组(不存在才放)
var tmp = new Array();
for(var i in arr){
//该元素在tmp内部不存在才允许追加
if(tmp.indexOf(arr[i])==-1){
tmp.push(arr[i]);
}
}
return tmp;
}

//使用Set, es6新增的一种数据结构,它和数组非常相似,但是成员的值都是唯一的,没有重复的值,
//但是不能删除重复对象,因为Set判断元素是否重复的办法类似于===运算符,两个对象总是不相等的

const arr = [1, 1, 2, 2, 3, 4, 5, 5]

const newArr = [...new Set(arr)]

console.log(newArr)  
// [1, 2, 3, 4, 5]    分析:对于一个一维数组,我们可以先把它转化成Set,再配合...解构运算符重新转化为数组

//1.add(value):添加某个值,返回Set结构本身。
//2.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
//3. has(value):返回一个布尔值,表示该值是否为Set的成员。
//4 .clear():清除所有成员,没有返回值。

//删除数组中的元素

Array.prototype.remove = function (v) {
    var set = new Set(this)
    set.delete(v)
    return [...set]
}

var arr = [1, 2, 3]

arr.remove(2)

// [1, 3]

4. 数组常见操作


     var arr = [1, 2, 3, 4, 5];

     //删除并返回数组中第一个元素

     var theFirst = arr.shift();
         alert(theFirst);//返回1 number
         alert(arr);//2,3,4,5 object

     //删除并返回数组中最后一个元素

    var theLast = arr.pop();
        alert(theLast);//返回5 number
        alert(arr);//2,3,4 object

    //在数组开始增加一个或多个元素,并返回数组长度

    var theNewArrStart = arr.unshift(-1, 0);
        alert(theNewArrStart);//返回5 number
        alert(arr);//-1,0,2,3,4 object

    //在数组结尾增加一个或多个元素,并返回数组长度

    var theNewArrEnd = arr.push(5, 6);
        alert(theNewArrEnd);//返回7 number
        alert(arr);//-1,0,2,3,4,5,6 object

    //从第i(数组索引)个位置删除n个元素

    arr.splice(1, 2);
        alert(arr);//-1,3,4,5,6 object

    //从第i(数组索引)个位置删除n个元素,并插入s个新元素

    arr.splice(1, 2, 10, 11, 12);
        alert(arr);//-1,10,11,12,5,6 object

    //合并2个或多个数组(concat中的参数可以为单个的值,也可以为数组,并且可以有多个值或数组)

    var arr1 = [7, 8];
    var arrCon = arr.concat(arr1);
        alert(arrCon);//-1,10,11,12,5,6,7,8 object

    //将数组中的元素使用特定的字符分隔,并返回字符串(如果不设置特定分割字符,则默认为逗号)

    var theSep = arrCon.join('-');
        alert(theSep);//-1-10-11-12-5-6-7-8 string

    //点到数组中元素的顺序

    var theRev = arrCon.reverse();
        alert(theRev);//8,7,6,5,12,11,10,-1
posted @ 2017-06-08 10:48  lewiskycc  阅读(165)  评论(1编辑  收藏  举报