美文网首页
JS对象 & JSON & JS数组操作

JS对象 & JSON & JS数组操作

作者: 我不信这样也重名 | 来源:发表于2018-12-13 18:55 被阅读0次

JSON格式


JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。
JavaScript 对象的字面量写法只是长的像 JSON 格式数据,二者属于不同的范畴,JavaScript 对象中很多类型(函数、正则、Date) JSON 格式的规范并不支持,JavaScript 对象的字面量写法更宽松。

一、JSON格式规定

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

合格范例如下:

["one", "two", "three"]

{ "one": 1, "two": 2, "three": 3 }

{"names": ["张三", "李四"] }

[ { "name": "张三"}, {"name": "李四"} ]

需要注意的是,空数组和空对象都是合格的 JSON 值

二、stringify()与parse()

  • JSON.stringify方法用于将一个值转为字符串。该字符串符合 JSON 格式,并且可以被JSON.parse方法还原。
  • 对于原始类型的字符串,JSON.stringify转换结果会带双引号。如果原始对象中,有一个成员的值是undefined、函数或 XML 对象,这个成员会被过滤;如果数组的成员是undefined、函数或 XML 对象,则这些值被转成null;正则对象会被转成空对象。
  • 如果传入的字符串不是有效的JSON格式,JSON.parse方法将报错。

数组操作


一、基本方法

  1. 创建数组:
var a = [1,2,3];
  1. 删除数组:
delete a[2];

二、堆栈方法

poppush能够让我们使用堆栈那样先入后出使用数组:

var a = [1, 2, 3];
a.push(4);
console.log(a);//[1, 2, 3, 4]
console.log(a.length);//4
console.log(a.pop());//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3

三、队列方法

shift方法可以删除数组index最小元素,并使后面元素index都减一,length也减一,这样使用shift/push就可以模拟队列了,对应的有一个unshift方法,用于向数组头部添加一个元素:

var a=[1, 2, 3];
a.unshift(4);
console.log(a);//[4, 1, 2, 3]
console.log(a.length);//4
console.log(a.shift());//4
console.log(a); //[1, 2, 3]
console.log(a.length);//3

四、splice方法

JavaScript提供了一个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]

五、常用方法

  1. join(char):作用是把数组元素(对象调用其toString()方法)使用参数作为连接符连接成一字符串,不会修改原数组内容:
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
  1. slice[start, end]用于返回数组中一个片段或子数组,如果只写一个参数返回参数到数组结束部分,如果参数出现负数,则从数组尾部计数(如-3即数组倒第三个),如果start大于end返回空数组,值得注意的一点是slice不会改变原数组,而是返回一个新的数组:
var a = [1,2,3,4,5];
console.log(a); //[1, 2, 3, 4, 5]
console.log(a.slice(1,2));//2
console.log(a.slice(1,-1));//[2, 3, 4]
console.log(a.slice(3,2));//[]
console.log(a); //[1, 2, 3, 4, 5]
  1. concat(array)用于拼接数组a.concat(b)返回一个ab共同组成的新数组,同样不会修改任何一个原始数组,也不会递归连接数组内部数组:
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]
  1. reverse()用于将数组逆序,与之前不同的是它会修改原数组
var a = [1,2,3,4,5];
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
  1. sort用于对数组进行排序,当没有参数的时候会按字母表升序排序,如果含有undefined会被排到最后面,对象元素则会调用其toString方法,如果想按照自己定义方式排序,可以传一个排序方法进去,很典型的策略模式,同样sort会改变原数组。
var a = [7,8,9,10,11]

    a.sort(function(v1,v2){
        return v1-v2
    })
    console.log(a) //[7, 8, 9, 10, 11]

    var users = [
        {
            name: 'aaa',
            age: 21
        },
        {
            name: 'baa',
            age: 18
        },
        {
            name: 'abc',
            age: 24
        }
    ]
    // 按age 从小到大排序

    var sortByAge = users.sort(function(v1, v2){
        return  v1.age > v2.age
    })

  // 按name从大到小排序
    var sortByName = users.sort(function(v1, v2){
        return  v1.name > v2.name
    })

ES5数组方法


  • Array.isArray(obj):用来判断一个对象是不是数组。
var a = [];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
  • .indexOf(element)/.lastIndexOf(element)用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索。
var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4
  • .forEach(element, index, array)遍历数组,参数为一个回调函数,回调函数有三个参数:当前元素、当前元素索引值、整个数组
var a = new Array(1,2,3,4,5,6);
a.forEach(function(e,i,array){
    array[i]= e + 1;
});
console.log(a); //[2, 3, 4, 5, 6, 7]
  • .every(function(element, index, array))/ .some(function(element, index, array)):这两个函数类似于离散数学中的逻辑判定,回调函数返回一个布尔值。
    every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false;
    some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false。
    在空数组上调用every返回true,some返回false
var a = [1, 2, 3, 4, 5, 6]

console.log(a.every(function(e, i, arr){
return e < 5
}))

console.log(a.some(function(e,i,arr){
  return e > 4
  • .map(function(element)):与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变
var a = [1, 2, 3, 4, 5, 6]

console.log(a.map(function(e){
  return e * e
}))  // [1, 4, 9, 16, 25, 36]

console.log(a) //[1, 2, 3, 4, 5, 6]
  • .filter(function(element))返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加。新数组只包含返回true的值,索引缺失的不包括,原数组保持不变
var a = [1, 2, 3, 4, 5, 6]

console.log(a.filter(function(e){
  return e % 2 == 0;
})) // [2, 4, 6]

console.log(a) //[1, 2, 3, 4, 5, 6]
  • .reduce(function(v1, v2), value) /.reduceRight(function(v1, v2), value)遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数:1.回调函数:把两个值合为一个,返回结果;2.value,一个初始值,可选
var a = [1, 2, 3, 4, 5, 6]
var b = a.reduce(function(v1, v2){ return v1 + v2 }) console.log(a) // 21
var b = a.reduceRight(function(v1, v2){ return v1 - v2 }, 100)
console.log(b) // 79

字符串


一、转义

  • 如果要在单引号字符串的内部,使用单引号(或者在双引号字符串的内部,使用双引号),就必须在内部的单引号(或者双引号)前面加上反斜杠,用来转义。
'Did she say \'Hello\'?'
// "Did she say 'Hello'?"

"Did she say \"Hello\"?"
// "Did she say "Hello"?"
  • 如果字符串的正常内容之中,需要包含反斜杠,则反斜杠前需要再加一个反斜杠,用来对自身转义。

二、多行

  • 字符串默认只能写在一行内,分成多行将会报错。因此可用如下方法进行多行编写:
  1. 可以在每一行的尾部使用反斜杠/。反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。
  2. 连接运算符+可以连接多个单行字符串,用来模拟多行字符串。
  3. 使用“``”:
var str =  `
你好
这里是饥人谷
jirengu.com
开启你的前端之路
`

Math函数与Date函数


讲义链接

相关文章

网友评论

      本文标题:JS对象 & JSON & JS数组操作

      本文链接:https://www.haomeiwen.com/subject/qlibhqtx.html