javascript数组、对象、Map和Set

          var s = '河南省,郑州市';
            console.log(s.indexOf('郑州市')); // 返回7
            console.log(s.indexOf('北京')); // 没有找到指定的子串,返回-1

            var s = 'hello,world';
            console.log(s.substring(0, 5)); // 从索引0开始到5(不包括5),返回'hello'
            console.log(s.substring(7)); // 从索引7开始到结束,返回'world'
            console.log(s.substr(2)); //截取2个长度,从1开始,返回截取后的字符串
            console.log(s.sub()); //把当前字符串显示为下标
            console.log(s.sup()); //把当前字符串显示为上标
            //对象操作
            var xiaoming = {
                name: '小明'
            };
            xiaoming.age; // undefined
            xiaoming.age = 18; // 新增一个age属性
            xiaoming.age; // 18
            delete xiaoming.age; // 删除age属性
            xiaoming.age; // undefined

            //数组操作
            var arr = [1, 2, 3];
            arr.length; // 3
            arr.length = 6; //直接改变数组长度,超出实际长度后,超出数组长度的成员会以空显示,表现为undefined
            console.log(arr[4]); // arr变为[1, 2, 3, , ,]

            var arr = [10, 20, '30', 'xyz'];
            console.log(arr.indexOf(10)); // 元素10的索引为0
            console.log(arr.indexOf(20)); // 元素20的索引为1
            console.log(arr.indexOf(30)); // 元素30没有找到,返回-1
            console.log(arr.indexOf('30')); // 元素'30'的索引为2


            var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
            console.log(arr.slice(0, 3)); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
            console.log(arr.slice(3)); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
            //slice()就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array:
            //注意到slice()的起止参数包括开始索引,不包括结束索引
            //如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array:
            var arr = [1, 2];
            console.log(arr.push('A', 'B')); // 返回Array新的长度: 4
            console.log(arr); // [1, 2, 'A', 'B']
            arr.pop(); // pop()返回'B' 把Array的最后一个元素删除掉
            arr; // [1, 2, 'A']
            //push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉,
            //如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉:,空数组继续pop不会报错,而是返回undefined

            var arr = ['Bafg', 'Car', 'Aed']; //按照默认顺序排序
            console.log(arr.sort());
            //reverse() 把整个Array的元素给掉个个, 也就是反转:

            var arr = ['one', 'two', 'three'];
            arr.reverse();
            //reverse() 把整个array的元素反转一下.从头到尾调换位置

            //splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:

            var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
            // 从索引2开始删除3个元素,然后再添加两个元素:
            arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
            arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
            // 只删除,不添加:
            arr.splice(2, 2); // ['Google', 'Facebook']
            arr; // ['Microsoft', 'Apple', 'Oracle']
            // 只添加,不删除:
            arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
            arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

            //concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:    
            var arr = ['A', 'B', 'C'];
            var added = arr.concat([1, 2, 3]);
            added; // ['A', 'B', 'C', 1, 2, 3]
            arr; // ['A', 'B', 'C']


            //请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array。
            //实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

            var arr = ['A', 'B', 'C'];
            var s = arr.concat(1, 2, [3, 4, [11, 22],
                [33, 44]
            ]); // ["A", "B", "C", 1, 2, 3, 4, Array[2], Array[2]]
            console.log(s);

            //join  当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:


            var xiaoming = {
                name: '小明'
            };
            xiaoming.age; // undefined
            xiaoming.age = 18; // 新增一个age属性
            xiaoming.age; // 18
            delete xiaoming.age; // 删除age属性
            xiaoming.age; // undefined
            if ('name' in xiaoming) { //要检测xiaoming是否拥有某一属性,可以用in操作符

                console.log('name' in xiaoming)
            }
            //如果in判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的:
            console.log('toString' in xiaoming);
            //因为toString定义在object对象中

            //要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:

            var xiaoming = {
                name: '小明'
            };
            xiaoming.hasOwnProperty('name'); // true
            xiaoming.hasOwnProperty('toString'); // false

            //Map和Set
            //JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。

            //但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

            //为了解决这个问题,最新的ES6规范引入了新的数据类型Map
            var m = new Map();
            var s = new Set();
            console.log(s);


            //Map
            //Map是一组键值对的结构,具有较高的查找效率
            //举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array:

            var names = ['Michael', 'Bob', 'Tracy'];
            var scores = [95, 75, 85];
            //给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长。

            //如果用Map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用JavaScript写一个Map如下:
            var mp = new Map([
                [xiaoming, '95'],
                ['xiaot', '905'],
                ['daniu', 96],
                ['xiaopang', '100'],
                ['xiao', 950]
            ]);
            var mp1 = new Map([
                [xiaoming, '95'],
                [xiaot, '905'],
                ['daniu', 96],
                ['xiaopang', '100'],
                ['xiao', 950]
            ]);
            //Uncaught ReferenceError: xiaot is not defined   at.....
            //注意:仔细对比mp和mp1的键值,可知在一个Map里,只能出现一个键为不带''的,如果出现一个以上会报错,为了规范,定义Map的时候,所有的键和值都要用''
            console.log(mp.get('xiaot')); // 95

            //初始化Map需要一个二维数组,或者直接初始化一个空Map。Map具有以下方法:

            var m = new Map(); // 空Map
            m.set('Adam', 67); // 添加新的key-value
            m.set('Bob', 59);
            m.has('Adam'); // 是否存在key 'Adam': true
            m.get('Adam'); // 67
            m.delete('Adam'); // 删除key 'Adam'
            m.get('Adam'); // undefined

            //Set
            //Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

            var s1 = new Set(); // 空Set
            var s2 = new Set([1, 2, 3]); // 含1, 2, 3
            var s = new Set([1, 2, 3, 3, '3']); //重复元素在Set中自动被过滤:
            s; // Set {1, 2, 3, "3"}
            //通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果

            //通过delete(key)方法可以删除元素:
            var s = new Set([1, 2, 3]);
            s; // Set {1, 2, 3}
            s.delete(3);
            s; // Set {1, 2}

猜你喜欢

转载自blog.csdn.net/feifantiantang/article/details/84346537