第 1 题
JSON格式的数据需要遵循什么规则?
- 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
- 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity,-Infinity和undefined)
- 字符串必须使用双引号表示,不能使用单引号。
- 对象的键名必须放在双引号里面。
- 数组或对象最后一个成员的后面,不能加逗号。
第 2 题
遍历 company 对象,输出里面每一项的值
var company = {
name: '饥人谷',
age: 3,
sex: '男'
}
var company = {
name: '饥人谷',
age: 3,
sex: '男'
}
for(key in company){
console.log(company[key])
}
第 3 题
使用 JSON 对象实现一个简单的深拷贝函数(deepCopy)。
这里使用JSON.stringify()和JSON.parse()来将对象转换成字符串并且还原的方式来实现深拷贝
// 定义数组
var obj = {
name: 'NinthG',
age: 26,
friends: ['Game', 'Skin', 'Music']
}
// 使用JSON.stringify()和JSON.parse()方法
var "new obj" = JSON.parse(JSON.stringify(obj))
// 改变obj中的name
obj.name = '秦涛'
//测试深拷贝是否成功
console.log(obj)
console.log("new obj")
// 输出结果
[object Object] {
age: 26,
friends: ["Game", "Skin", "Music"],
name: "秦涛"
}
[object Object] {
age: 26,
friends: ["Game", "Skin", "Music"],
name: "NinthG"
}
第 4 题
分别举例说明数组方法push、pop、shift、unshift、join、splice、sort、join、reverse、concat的作用?
- push:在数组最后添加一个元素, 返回值为添加元素后的数组长度,改变当前数组
var a = [1, 2, 3];
a.push(4);
console.log(a);//[1, 2, 3, 4]
console.log(a.length);//4
- pop:将数组的最后一个元素拿出来,返回值为拿出元素,改变当前数组
var a = [1, 2, 3, 4];
consloe.log(a.pop());//4
console.log(a);//[1, 2, 3]
console.log(a.length);//3
- shift:将数组第一个元素拿出来,返回值为拿出元素,改变当前数组
var a = [1, 2, 3, 4];
consloe.log(a.shift());//1
console.log(a);//[ 2, 3, 4]
console.log(a.length);//3
- unshift:在数组第一位添加一个元素,返回值为添加元素后的数组长度,改变当前数组
var a = [2, 3, 4];
a.unshift(1);
console.log(a);//[ 1, 2, 3, 4]
console.log(a.length);//4
- join:将数组中的值用方法内的字符串拼接成新的字符串,返回拼接的字符串,不改变当前数组
var a = [1,2,3,4,5];
console.log(a.join(',')); //1,2,3,4,5
console.log(a.join(' ')); //1 2 3 4 5
-
splice:用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数
开始索引
删除元素的位移
插入的新元素,当然也可以写多个
splice方法返回一个由删除元素组成的新数组,没有删除则返回空数组
var a = [1, 2, 3, 4, 5];
console.log(a.splice(1,3));//[2, 3, 4]
console.log(a.length);//2
console.log(a);//[1,5]
var a = [1,2,3,4,5];
a.splice(1,0,9,99,999);
console.log(a.length); //8
console.log(a);//[1, 9, 99, 999, 2, 3, 4, 5]
a.splice(1,3,8,88,888);
console.log(a.length);//8
console.log(a);//[1, 8, 88, 888, 2, 3, 4, 5]
- sort:用于对数组进行排序,会改变原数组。
var a=[5,4,3,2,1]
a.sort()
console.log(a) //[1, 2, 3, 4, 5]
- reverse:用于将数组逆序,与会修改原数组
var a = [1,2,3,4,5];
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
- concat:用于拼接数组,a.concat(b)返回一个a和b共同组成的新数组,同样不会修改任何一个原始数组,也不会递归连接数组内部数组
var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
第 5 题
写一个函数,操作数组,返回一个新数组,新数组中只包含正数。
function filterPositive(arr){
}
var arr = [3, -1, 2, '饥人谷', true]
filterPositive(arr)
console.log(filterPositive(arr)) //[3, 2]
function filterPositive(arr){
return arr.filter(function(e){
return (typeof(e) == "number" && e > 0);
});
}
var arr = [3, -1, 2, '饥人谷', true];
filterPositive(arr);
console.log(filterPositive(arr)); //[3, 2]
第 6 题
用 splice函数分别实现 push、pop、shift、unshift方法。
如:
function push(arr, value){
arr.splice(arr.length, 0, value)
return arr.length
}
var arr = [3, 4, 5]
arr.push(10) // arr 变成[3,4,5,10],返回4
改进版
function push(arr){
for(var i=1; i
回答
function push(arr){
for(var i=1; i
function pop(arr){
return arr.aplice(arr.length-1,1);
}
function shift(arr){
return arr.aplice(0,1);
}
function unshift(arr){
for(var i=1; i
第 7 题
对以下代码 users中的对象,分别以 name 字段、age 字段、company 字段进行排序
var users = [
{ name: "John", age: 20, company: "Baidu" },
{ name: "Pete", age: 18, company: "Alibaba" },
{ name: "Ann", age: 19, company: "Tecent" }
]
var sortByName = users.sort(function(v1,v2){
return v1.name > v2.name;
});
var sortByAge = users.sort(function(v1,v2){
return v1.age > v2.age;
});
var sortByCompany = users.sort(function(v1,v2){
return v1.company > v2.company;
});