ES6数组方法

零、数组类型判断

Array.isArray()

将数组作为参数传入,返回值为布尔值

let arr = [1,2,3]
let res = Array.isArray(arr) // true

一、数组创建

Array构造函数的特性

如果使用Array构造函数传入一个数值型的值,那么数组的长度length属性会被设置为该值;

let items = new Array(2);
console.log(items.length); // 2
console.log(items[0]); // undefined
console.log(items[1]); // undefined

如果传入一个非数值型的值,那么这个值会成为目标数据的唯一项;
如果传入多个值,无论这些值是不是数值型的,都会变为数组的元素。

Array.of()

无论有多少参数,参数是什么类型的,Array.of()方法总会创建一个包含所有参数的数组。

let items = Array.of(2);
console.log(items.length); // 1
console.log(items[0]); // 2

二、伪数组转数组

ES5方式一

function makeArray (arrayLike) {
    var result = [];
    for (var i = 0, len = arrayLike.length; i < len; i++ ) {
        result.push(arrayLike[i]);
    }
    return result;
}
console.log(makeArray('hello')); //  ["h", "e", "l", "l", "o"]

ES5方式二

function makeArray (arrayLike) {
    return Array.prototype.slice.call(arrayLike);
}
console.log(makeArray('world')); // ["w", "o", "r", "l", "d"]

ES6方式一

let str = "hello";
let arr = [...str];
console.log(arr); // ["h", "e", "l", "l", "o"]

ES6方式二

let str = "hello";
let arr = Array.from(str);
console.log(arr); // ["h", "e", "l", "l", "o"]

Array.from()可接收三个参数,第一个参数为类数组对象,第二个参数为映射函数,如果使用了映射函数,可以传第三个参数表示映射函数的this值。

function translate () {
    return Array.from(arguments, (value) => value+1);
}
let numbers = translate(1, 2, 3);
console.log(numbers); // [2, 3, 4]
let helper = {
    add (value) {
        return value+1;
    }
}
function translate () {
    return Array.from(arguments, helper.add, helper);
}
let numbers = translate(1, 2, 3);
console.log(numbers); // [2, 3, 4]

三、查找元素

find()和findIndex()

ES5中可以通过indexOf()lastIndexOf()查找与特定值匹配的元素,
而ES6中的find()findIndex()可以根据某个条件去查找匹配的元素。
参数为回调函数和回调函数的this值,
回调函数的参数同forEach(),分别为:元素,索引,数组本身。
find()返回查找的值,findIndex()返回查找的值的索引,两者都只返回第一个满足条件的值

let numbers = [1, 2, 3, 4, 5];
console.log(numbers.find(n => n > 3)); // 4
console.log(numbers.findIndex(n => n > 3)); // 3

includes()

includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
语法: arr.includes(searchElement, fromIndex) fromIndex可选

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, NaN].includes(NaN); // true

如果fromIndex 大于等于数组长度 ,则返回 false 。该数组不会被搜索:

var arr = ['a', 'b', 'c'];
 
arr.includes('c', 3);   //false
arr.includes('c', 100); // false

如果为负值,则按升序从 array.length + fromIndex 的索引开始搜索。默认为 0。如果计算出的索引小于 0,则整个数组都会被搜索。

// 数组长度是3
// fromIndex 是 -100
// computed index 是 3 + (-100) = -97
 
var arr = ['a', 'b', 'c'];

arr.includes('a', -2); // false
arr.includes('a', -100); // true

四、数组遍历

forEach()

forEach不能中断遍历,没有返回值

let arr = [1, 2, 3];
arr.forEach((item, index, arr) => {
    console.log(item)
})

map()

map返回一个新的数组

let arr = [1, 2, 3];
let newArr = arr.map((item, index, arr) => {
    return item * 2;
})
console.log(arr) // [1, 2, 3]
console.log(newArr) // [2, 4, 6]

filter()

filter可以过滤数组,包含满足条件的数组项,返回一个新数组

let arr = [1, 2, 3];
let newArr = arr.filter((item, index, arr) => {
    return item <= 2;
})
console.log(arr) // [1, 2, 3]
console.log(newArr) // [1, 2]

some()

some返回布尔值,如果有一个满足条件的值则返回true

let arr = [1, 2, 3];
let result = arr.some((item, index, arr) => {
    return item < 2;
})
console.log(result) // true

every()

every返回布尔值,如果所有数组项都满足条件则返回true

let arr = [1, 2, 3];
let result = arr.every((item, index, arr) => {
    return item < 2;
})
console.log(result) // false

五、遍历器

keys()

返回一个包含数组中每个索引键的Array Iterator对象。

let arr = ['a', 'b', 'c'];
let iterator = arr.keys()
for (let key of iterator) {
  console.log(key); // expected output: 0 1 2
}

对象也有相应的方法,获取对象所有属性的键

var arr = ["a", , "c"];
var sparseKeys = Object.keys(arr);
var denseKeys = [...arr.keys()];
console.log(sparseKeys); // ['0', '2']
console.log(denseKeys);  // [0, 1, 2]

values()

values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。

let arr = ['a', 'b', 'c'];
let iterator = arr.values();

for (const value of iterator) {
  console.log(value); // expected output: "a" "b" "c"
}

对象也有相应的方法,获取对象所有属性的值

var arr = ["a", , "c"];
var sparseKeys = Object.values(arr);
var denseKeys = [...arr.values()];
console.log(sparseKeys); // ["a", "c"]
console.log(denseKeys);  // ["a", undefined, "c"]

entries()

entries() 方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

var arr = ["a", "b", "c"];
var iter = arr.entries();
var a = [];

// for(var i=0; i< arr.length; i++){   // 实际使用的是这个 
for(var i=0; i< arr.length+1; i++){    // 注意,是length+1,比数组的长度大
    var tem = iter.next();             // 每次迭代时更新next
    console.log(tem.done);             // 这里可以看到更新后的done都是false
    if(tem.done !== true){             // 遍历迭代器结束done才是true
        console.log(tem.value);
        a[i]=tem.value;
    }
}
    
console.log(a);                         // 遍历完毕,输出next.value的数组

对象也有相应的方法,获取对象所有属性的键值对

const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]

网站导航

网站导航

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 三,字符串扩展 3.1 Unicode表示法 ES6 做出了改进,只要将码点放入大括号,就能正确解读该字符。有了这...
    eastbaby阅读 1,510评论 0 8
  • 转载:在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总...
    七色烟火阅读 3,207评论 0 3
  • 原创文章&经验总结&从校招到A厂一路阳光一路沧桑 详情请戳www.codercc.com 主要知识点:创建数组、数...
    你听___阅读 1,021评论 0 2
  • 读书太多记不住?作者的逻辑结构搞不清楚?为什么读了那么多书,自己还是行动不起来?读书到底应该不应该做笔记?...
    耿小冬阅读 553评论 0 2
  • ——我还是喜欢你,像疯了一样,不可理喻。 也许在最坏的时间里,总能碰见你的砰然心动。曾经的我一直否认这句话,...
    木易乱雨阅读 248评论 0 1