lesson21 JS对象 & JSON & JS数组操作 习题1

第 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:用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数

    1. 开始索引

    2. 删除元素的位移

    3. 插入的新元素,当然也可以写多个

    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;
});

你可能感兴趣的:(lesson21 JS对象 & JSON & JS数组操作 习题1)