// js二维数组的增删改查,遍历操作
// 情况一,一般二维数组,一维二维键值均为数字
edit();
function edit(){
    var data = [
        ["30", 1, "联系组一", "1", true],
        ["31",  1, "联系组二", "1", true],
        ["180", 1,"局机关第一党支部", "1", true],
        ["181", 1,"局机关第二党支部", "1", true],
        ["182", 1,"局机关第三党支部", "1", true],
        ["183", 1,"局机关第四党支部", "1", true],
        ["184", 1,"局机关第五党支部", "1", true],
        ["185", 1,"局机关第六党支部", "1", true],
        ["186", 1,"局机关离退休第一党支部", "1", true],
        ["187", 1,"局机关离退休第二党支部", "1", true],
        ["188", 1,"局机关离退休第三党支部", "1", true]
    ];
    // 通过键值获取值
    // console.log(data);
    // console.log(data[0][3]);

    // 数组添加的几种方式
    data.push(["189", 1, "局机关离退休第四党支部", "1", true]);
    data[data.length] = ["200", 1, "局机关离退休第四党支部", "1", true];
    data.unshift( ["2", 1, "局机关离退休第四党支部", "1", true] );         // 表示在数组头插入
    data.splice(0,0,["1", 1, "党委总支", "1", true]);                     // 表示在data[0]的位置插入

    // 删除数组某一元素
    // 方法一,使用splice(键值,长度,替换的内容)
    data.shift();                // 删除数组第项data[0]
    data.splice(0,1);            // 表示删除data[0]
    data.splice(0,2);            // 表示删除data[0]、data[1];
    data[3].splice(0,1,"111");   // 表示替换data[3]的内容为111;
    data.pop();                  // 删除最后一个,并返回该值
    // console.log(data);

    // 查询的几种方式
    // console.log( data.indexOf( ["180", 1, "局机关第一党支部", "1", true, Array(5)] ) );  // indexOf,只可搜素整数参数(所以我这里写的,是没用的)

    // Arr.find()的参数是一个回调函数,数组所有元素会遍历这个回调函数,直到找到第一个返回值为true的元素,然后返回该元素否则返回undefined;
    // 下面结果返回值:["181", 1, "局机关第二党支部", "1", true, Array(1)]
    console.log( data.find(function(item,index,array){
        return item[0] == "181";
        // return item == ["181", 1, "局机关第二党支部", "1", true, Array(1)]+"";    // 这个可以匹配数组
    }));

    // 和上面find一样,不同的是返回结果是索引,可以用于splice根据索引删除;或者判断某个值是否存在数组钟
    console.log( data.findIndex(function(item,index,array){
        return item[0] == "181";
        // return item == ["181", 1, "局机关第二党支部", "1", true, Array(1)]+""; // 这个可以匹配数组
    }));

    // 返回搜索到的值在数组中的索引
    console.log( $.inArray("181", data[1]) );

    // 如果要查找一个一维数组在另一个多维数组是否存在,还是用遍历查询把。。。


    // 遍历数组的几种方式【遍历在手,想咋整就咋整】
    var len,len1;
    var i,j;
    for(i=0, len=data.length; i<len; i++) {
        // console.log(data[i]);
        for(j=0,len1 = data[i].length;j<len1;j++){
            // console.log( data[i][j] );
        }
    }

    // 参数:item数组中的当前项, index当前项的索引, array原始数组;不支持IE
    data.forEach((item, index, array)=>{
        // console.log(item);
    });

    // 参数:item数组中的当前项, index当前项的索引, array原始数组;支持return
    data.map(function(item, index, array){
        // console.log(item);
    });

    // 可以正确响应break、continue和return语句
    for (var item of data) {
        // console.log(item);
    }

    // some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。
    console.log( data.some( function( item, index, array ){
        return item[1] == 1;
    }));

    // every()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true。
    // 建议用于搜索、比较、查找方向
    console.log( data.every( function( item, index, array ){
        return item[3] == true;
    }));
    return true;
}

下面是多维数组去重;

edit();
function edit(){
    var data = [
        ["30", 1, "联系组一", "1", true],
        ["30", 1, "联系组一", "1", true],
        ["31",  1, "联系组二", "1", true],
        ["180", 1,"局机关第一党支部", "1", true, Array(5)],
        ["180", 1,"局机关第一党支部", "1", true, Array(5)],
        ["181", 1,"局机关第二党支部", "1", true, Array(1)],
        ["182", 1,"局机关第三党支部", "1", true],
        ["183", 1,"局机关第四党支部", "1", true, Array(1)],
        ["184", 1,"局机关第五党支部", "1", true],
        ["185", 1,"局机关第六党支部", "1", true],
        ["186", 1,"局机关离退休第一党支部", "1", true],
        ["187", 1,"局机关离退休第二党支部", "1", true],
        ["188", 1,"局机关离退休第三党支部", "1", true]
    ];


方法一:

    var res = [];
    for( var item of data ){
        var index = res.findIndex(function(value,index,array){
           return item+"" == value+"";      // 这里需要一维数组的比较,需要转字符串,否则数组格式比较不成立
        });
        if( index == -1 ){
            res.push(item);
        }
    }
}

方法二:

var res = [];
for(var value of data){
    res[value[0]] = value;    // 这里因为第一列是主键,所以作为键值直接覆盖去重;
}

方法三:

var res = [];
for(var value of data){
    res[value.join()] = value;     //将所有内容转字符串,作为键值覆盖去重,比上面那步好,不用考虑主键;
}

终极大招:【一般做项目的,都会用到,很少会用数组去整合数据,因为数组不能以任意数据类型作为键值;】

js以任意字符串为键值,可以将各种数据进行处理;【定义对象的方式】

var a = {
    '1':{"id":1,"name":"甘海彬1","sno":"20134087105"},
    '2':{"id":2,"name":"甘海彬2","sno":"20134087106"},
    '3':{"id":3,"name":"甘海彬3","sno":"20134087107"},
    '4':{"id":4,"name":"甘海彬4","sno":"20134087108"},
    '5':{"id":5,"name":"甘海彬5","sno":"20134087109"},
    '6':{"id":6,"name":"甘海彬6","sno":"20134087110"},
    '7':{"id":7,"name":"甘海彬7","sno":"20134087111"},
};

// 对象的增删改查,去重,遍历和数组差不多;
console.log(a['1'].id);
console.log(a);

对象的遍历一index是索引

for(var index in a){
    console.log(a[index]);
}

对象的遍历二

Object.keys(a).forEach(function (index) {
   console.log(key,a[index]);
});