使用对象模拟模拟实现pop/push,shift/unshift
"use strict"
let users = {
0:{name: "Zhao", age: 23},
1:{name: "Qian", age: 21},
2:{name: "Sun", age: 25},
length: 3,
//在末端删除一个对象并返回
pop(){
//容错机制:length为 0 时 users 对象为空
if(this.length == 0){
alert("删除失败,users 为空")
return;
}
//临时保存要删除的属性
let moment = this[this.length - 1];
//删除属性
delete this[this.length - 1];
//length 自减
this.length--;
return moment;
},
//在末端添加一个对象
push(user){
this[this.length] = {name:user.name,age:user.age};
this.length++;
},
//在首端删除一个对象,并返回被删除对象
shift(){
//提取要删除对象
let userName = this[0].name;
let userAge = this[0].age;
//元素左移一位
if(this.leftMove()){
//this.length自减
this.length--;
return {userName, userAge};
}
else{
alert("操作失败!");
return;
}
},
//在首端添加一个对象
unshift(user){
//右移
this.rightMove();
//首端添加对象
this[0] = user;
//this.length自增
this.length++;
return;
},
//
//将 users 整体元素左移一位
//this.length == 0 返回 false,否则返回 true
leftMove(){
//length == 0 返回false
if(this.length == 0){
return false;
}
for(let i = 0; i < this.length - 1; i++){
this[i] = object.assign({}, this[i + 1]);
}
return true;
},
//将 users 整体元素右移一位
rightMove(){
if(this.length == 0){
return;
}
for(let i = this.length - 1; i >= 0; i--){
//复制 this[i] 的副本并返回给 this[i + 1]
this[i + 1] = Object.assign({}, this[i]);
}
}
}
//-------------------------------------------------------分割线-------------------------------------------------------
//测试用例
function printUsersFn(){
alert("指令集: \n1.pop \n2.push \n3.unshif\n" +
"4.shift \n520.printEvery");
}
//指令输入
function scanfOlder(){
return prompt("请输入指令", "");
}
//属性输入,并返回一个对象
function scanfItem(){
let name = prompt("请输入名称:","");
let age = prompt("请输入年龄:","");
return {name,age};
}
//打印所有对象
function printEvery(users){
let userStr = "";
for(let i = 0; i < users.length; i++){
userStr += `${users[+i].name} + ${users[+i].age} \n`;
}
alert(userStr);
}
//指令枚举
function userFn(users){
switch(scanfOlder()){
case '1':users.pop(); break; //尾端删除一个元素
case '2':users.push(scanfItem()); break; //尾端添加一个元素
case '3':users.unshift(scanfItem()); break; //首端添加一个元素
case '4':users.shift(); break; //首端删除一个元素
case 'length':alert(users.length); break; //打印 users.length
case '520':printEvery(users); break; //打印所有元素
default:alert("指令错误!");
}
}
while(true){
//打印指令集
printUsersFn();
//输入指令并执行
userFn(users);
}