push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。此方法可把它的参数顺序添加到s arrayObject 的尾部。它直接修改 arrayObject.

splice() 方法用于插入、删除或替换数组的元素。此方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。返回的是被删除的元素的数组。 既是可直接更改数组,可以对数组的任何位置插入删除元素。

下面是个实例,实现两个功能,一:添加好友分组,二:点击任意的好友即可删除该好友。

1.首先建好框架

javascript数组的push 数组push数组_数组

javascript数组的push 数组push数组_html_02

View Code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>数组</title>
<style type="text/css">
body{ font-size: 12px; }
body, div, dl, dt, dd { margin: 0;}
li{ list-style: none; }

#button { width: 960px; height: 40px; margin: 0 auto; padding-top: 15px; }
.wrap { width: 960px; margin: 0 auto; }
.list dt { heihgt: 26px; font-size: 13px; font-weight: bold; line-height: 26px; }
.list dd { display:none;}

</style>
</head>
<body>
<div id = "button">
<input type = "button" id="btn1" value="添加数据"/>
<input type = "button" id="btn2" value="添加好友分组"/>
</div>
<div class="wrap" id="box">

</div>
</body>
</html>

然后就是js 文件了。 这里我们首先定义两个数组 一个是分组数组 group , 一个是成员数组 member, 这两个数组是相对应的,因此member是一个二维数组, 然后对数组添加新的元素 或者删除元素 每次的添加和删除后都要清空一下,重新创建数组,从而得到才得到添加/删除后新的数组。

javascript数组的push 数组push数组_数组

javascript数组的push 数组push数组_html_02

View Code

var tag = "";
var group = ["在线好友","我的好友","高中好友","大学好友"];
var member = [["梦无语","喜洋洋", "漠雪寒霜", "小石头"],["美羊羊","懒洋洋","千代"],["冰块","醉翁","花太香"],["繁世华灯","遗憾","叶子"]];

function createArray() {
var id ="";
for (var i = 0; i < group.length; i++) {
        id = "dt"+i;
        tag += "<dt id="+id+">" + group[i] + "</dt><dd><ul>";

if(i<member.length)
        {
var temp = "";

for (var j = 0; j < member[i].length; j++) {
                temp = "li" + i + j;
                tag += "<li id = "+temp+">" + member[i][j] + "</li>";
            }
        }
        tag += "</ul></dd>";    
    }

    tag = "<dl id='dlist'>" + tag + "</dl>";    
var box = document.getElementById("box");
    box.innerHTML = tag;    

    addClick();   //添加分组里的好友成员
    removeClick();//删除
}

function addGroup() {
var btn2 = document.getElementById("btn2");

    btn2.onclick = function () {
        tag="";//清空
        var name = window.prompt("please enter your groupname", "");

if(name == "" || name == null){
             name ="新添分组";
        } else if(name == null) {
return false;
        }
        group.push(name);    //添加元素到数组的末尾
        createArray();        //重新创建数组 
        addClick();            //调用 添加好友的函数
    };
}

function addClick() {
//添加分组里的好友成员
        for (var i = 0; i < group.length; i++) {
if (i < member.length) {
var newMember = new Array();

                member.push(newMember);

            }
            clickEve(i);
        }
}

//解决上面的闭包问题。
function clickEve(n) {
var dtId = document.getElementById("dt"+n);

    dtId.onclick = function() {        
var memberName = window.prompt("please write your firend's names", "");    

if (memberName == "") {
            memberName = "新的好友";
        } else if(memberName == null) {
return false;
        }
        member[n].push(memberName);

        tag = "";    //重新创建之前都要 清空
        createArray();

    }
}

function removeClick() {
for (var i = 0; i < group.length; i++) {
if( i < member.length) {
            pro(i);
        }
    }
}

function pro(m) {

for(var j = 0; j < member[m].length; j++) {
        removeEle(m, j);
    }
}
function removeEle(m, n) {
var liId = document.getElementById("li" + m + n);

    liId.onclick = function() {
         member[m].splice(n, 1);   //删除
         tag = ""; 
         createArray();         //重新创建一次。
    }    
}


 window.onload = function() {

var btn = document.getElementById("btn1");
        btn.onclick = function() {
            createArray();
        }

        addGroup();//添加分组
}

具体效果就要自己亲自动手 实验下了。这里不多说了,其中我做的过程中,遇到了几点问题,我是个初学者,所以每次总是犯这几点错误。

第一: 每次添加元素后,alert 一下该数组,都可以读取到数组的元素,然后在页面中没有看到新添的元素,没想到去重新创建面板列表来读取元素,这里push方法返回的新的长度,所以,每次添加的时候都要再创建一次列表 来重新读取数组的元素。

第二: 在添加click事件时,我直接是用group[i].onclick = function() {} 谁知道没反应,怎么测试都没反应,最后我的理解是数组里的元素是字符串,所以不能用onclick事件。 所以只好分组每个都加个id,我是个初学者,知识面狭窄,如果你有更好的方法,可以给我提下你的宝贵意见。

第三:没加判断,如果新添加分组 “在线好友”, 我想要 在里面再添加几个 好友,这时 会出现member[i]  undefined  错误,最后分析了好久才知道,二维数组里的元素本来就是个数组,  想在里面添加新的元素,必须先创建一个数组,然后在添加元素,

function addClick() {
 //添加分组里的好友成员
  for (var i = 0; i < group.length; i++) {
   if (i < member.length) {
    var newMember = new Array();     //新建个数组对象,然后 添加到 member二维数组里。
    
    member.push(newMember);
    
   }
   clickEve(i);
  }
}

第四: 删除这块,还有其他方法,关于splice 和slice的 两个的用法, 我更喜欢splice的用法、或许是因为它可以直接对数组进行更改的原因吧。。。