JSON 和 Array

1. JSON 格式的数据需要遵循什么规则

  1. 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
  2. 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用 NaN, Infinity, -Infinity和undefined)。
  3. 字符串必须使用双引号表示,不能使用单引号。
  4. 对象的键名必须放在双引号里面。
  5. 数组或对象最后一个成员的后面,不能加逗号。

2. 使用 JSON 对象实现一个简单的深拷贝函数(deepCopy)

var obj1 = {
  age: 20,
  name: 'wangpeng',
  friend : {
    name: 'dog',
    sex: 'male'
  }
}

function copy(obj) {
var newObj = {}
newObj = JSON.parse( JSON.stringify(obj) )
return newObj
}

var obj2 = copy(obj1)
console.log(obj2)

3.1 数组方法里push、pop、shift、unshift、join、splice分别是什么作用?

var arr = [1, 2, 3, 4]
arr.push('wangpeng') // 在数组的最后面添加一个元素, 返回数组的长度 5
console.log(arr)  //  [1, 2, 3, 4, 'wangpeng']
arr.pop() // 把数组的最后一个元素取出来,返回这个元素 4
console.log(arr)  // [1, 2, 3]
arr.unshitf('wangpeng') //  在数组的最前面添加一个元素, 返回数组的长度 5
console.log(arr)  // ['wangpeng', 1, 2, 3, 4]
arr.shift() // 把数组的第一个元素取出来,返回这个元素 1
console.log(arr)  // [2, 3, 4]
var str1 = arr.join()
// 把数组中的所有元素放入一个字符串, 元素是通过指定的分隔符进行分隔, 参数为空则和数组一样,用逗号分隔
console.log(str1)  // 1,2,3,4
console.log(arr)  // [1, 2, 3, 4]
var str2 = arr.join("") // 表示用空字符串连接
console.log(str2)  // 1234
var arr1 = arr.splice(1,2) // 从arr中,下标为1的元素开始,拿出2个元素作为数组返回,原数组发生改变 [2, 3]
console.log(arr) // [1, 4]

3.2 用 splice函数分别实现push、pop、shift、unshift方法

JavaScript提供了一个splice方法用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数

  1. 开始索引 (可以是负数,表示从后向前索引, - 1 可以理解为 arr.length - 1)
  2. 删除元素的位移
  3. 插入的新元素,当然也可以写多个

splice方法返回一个由删除元素组成的新数组,没有删除则返回空数组

arr.splice(arr.length, 0, 5) // push 在 arr 中最后面,添加元素 5
//  这里 splice 模拟,push,必须要大于等于length,不能length-1。否则会在最后一个元素之前的一位添加 
arr.splice(arr.length-1, 1) // pop 从arr 中删除最后一个元素,并返回这个由删除元素组成的新数组,原数组改变, arr.length-1 可以 理解为 -1,代表着数组最后一位
//这里也可以是 - 1,表示arr 最后一位, 但是和上面的添加元素不同,这里第一个参数超出 arr 最大下标之后,返回空数组,也就是没有删除
arr.splice(0, 0, 0) // unshift 在 arr 中最前面,添加元素 0
arr.splice(0, 1) // shift 从 arr 中删除第一个元素

4. 写一个函数,操作数组,数组中的每一项变为原来的平方,在原数组上操作

方法一: 虽然原数组变了,但是函数内部,不是在原数组操作,而是把平方结果进行赋值

function squareArr(arr){
  for(var i = 0; i < arr.length; i++){
    arr[i] = arr[i] * arr[i]
  }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

方法二: 使用splice方法, 在原数组上进行替换(实际过程是: 删除+新增)

function squareArr(arr){
  for(var i = 0; i < arr.length; i++){
    arr.splice(i,1,Math.pow(arr[i],2))
  }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

5. 写一个函数,操作数组,返回一个新数组,新数组中只包含正数

首先是直接在原数组上操作,最后原数组发生改变

function filterPositive(arr){
  for(var i = 0; i < arr.length; i++){
    if( typeof arr[i] !== 'number' || arr[i] <= 0 ){
      arr.splice(i,1)
      i--
    }
  }
}
var arr = [3, -1,  2,  '饥人谷', true]
filterPositive(arr)
console.log(arr) //[3,  2]

正确方法是向新的数组内 push 元素,然后return 新的数组,这样返回的才是新数组,而原数组不变

function filterPositive(arr){
  var newArr = []
  for(var i = 0; i < arr.length; i++){
    if(typeof arr[i] === 'number' && arr[i] > 0 ){
      newArr.push(arr[i])
    }
  }
  return newArr
}
var arr = [3, -1,  2,  '饥人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1,  2,  '饥人谷', true]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、使用数组拼接出如下字符串 ,其中styles数组里的个数不定 代码: 2、写出两种以上声明多行字符串的方法 一...
    1w1ng阅读 1,526评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,881评论 0 4
  • 初次接触英语课堂,是初中一年级。 在那之前,听别人说过类似“Ok”、"Thank you",对这种陌生的语言心生向...
    陈若黎阅读 2,812评论 0 3
  • 我想要很多来自在意的人的尊重与重视 我想要很多来自在意的人的与关心与呵护 我想要很多来自在意的人的爱 现在的社会 ...
    _秋夜阅读 1,450评论 0 0
  • 时间的平淡冲杀着记忆 那夜下的一檀余香 又何尝不寂寞 静脉 心跳 无助地雀跃着 夜好庞大 吞噬了一切 还有小小的...
    张桃子阅读 1,094评论 0 5

友情链接更多精彩内容