数组

不会改变原数组的方法:

  • map
  • reduce
  • filter
  • apply

会改变原数组值的方法

  • sort
  • reverse

map方法,对数组的每一项进行操作,传入回调函数

reduce方法,相当于一个累计器传入回调函数

filter 方法用来迭代一个数组,并且按给出的条件过滤出符合的元素。

filter 方法传入一个回调函数,这个回调函数会携带一个参数,参数为当前迭代的项(我们叫它 val )
回调函数返回 true 的项会保留在数组中,返回 false 的项会被过滤出数组。
使用 filter 来创建一个新数组,新数组的值是 oldArray 中值小于6的元素。不许改变原数组 oldArray 。

var oldArray = [1,2,3,4,5,6,7,8,9,10];

// 只能在这一行下面写代码

var newArray = oldArray.filter(function(val){
  return val < 6;
});

sort 方法,sort 方法将改变原数组,返回被排序后的数组。

  • sort 可以把比较函数作为参数传入,比较函数有返回值,

  • 如果没有传入比较函数,它将把值全部转成字符串,并按照字母顺序进行排序

  • 使用比较函数的原理(摘自Adobe说明):
    此方法使用语法和参数顺序 Array.sort(compareFunction, sortOptions),其参数定义如下:
    compareFunction - 一个用来确定数组元素排序顺序的比较函数。此参数是可选的。比较函数应该用两个参数进行比较。给定元素 A 和 B,compareFunction 的结果可以具有负值、0 或正值:
    若返回值为负,则表示 A 在排序后的序列中出现在 B 之前。
    若返回值为 0,则表示 A 和 B 具有相同的排序顺序。
    若返回值为正,则表示 A 在排序后的序列中出现在 B 之后。
    下面的例子将展示 sort 的使用,传入的比较函数把元素按照从小到大的顺序进行排列

var array = [1, 12, 21, 2];
array.sort(function(a, b) {
  return a - b;
});

reverse 方法来翻转数组。

var myArray = [1, 2, 3];
myArray.reverse();
// [3, 2, 1];

concat 方法可以用来把两个数组的内容合并到一个数组中。

concat 方法的参数应该是一个数组。参数中的数组会拼接在原数组的后面,并作为一个新数组返回。
使用 .concat() 将 concatMe 拼接到 oldArray 后面,并且赋值给 newArray。

var oldArray = [1,2,3];
var newArray = [];

var concatMe = [4,5,6];

// 只能在这一行下面写代码
newArray = oldArray.concat(concatMe);

将二维数组转化为一维数组的方式apply

const arr1 = [[1,2,3],[4,5,6]]
    // type 1
    this.applys = [].concat(...arr1)
    console.log(this.applys, 'applys')
    // type 2
    this.applys = [].concat.apply(...arr1)
    // type 3
    this.applys = [].concat.apply([], arr1)
    //最终结果都是: [1, 2, 3, 4, 5, 6, __ob__: Observer]

split 方法按指定分隔符将字符串分割为数组。

  • 你要给 split 方法传递一个参数,这个参数将会作为一个分隔符
    **使用空格( " " )来分割字符串。
    **
var string = "Split me into an array";
var array = [];

// 只能在这一行下面写代码

array = string.split(" ");

join 使用 join 方法来把数组转换成字符串,

  • 里面的每一个元素可以用你指定的连接符来连接起来,这个连接符就是你要传入的参数。
    使用 join 方法,连接符为' '把数组 joinMe 转化成字符串 joinedString.
var joinMe = ["Split","me","into","an","array"];
var joinedString = '';

// 只能在这一行下面写代码

joinedString = joinMe.join(" ");

字符串

翻转字符串

先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。

/*reverseString("hello") 应该返回一个字符串
reverseString("hello") 应该返回 "olleh".
reverseString("Howdy") 应该返回 "ydwoH".
reverseString("Greetings from Earth") 应该返回 "htraE morf sgniteerG".*/

function reverseString(str) {
  // 请把你的代码写在这里
  return str;
}

reverseString("hello");
function reverseString(str) {
  return str.split("").reverse().join("");
}
reverseString("hello");
reverseString("Howdy");
reverseString("Greetings from Earth");

计算一个整数的阶乘

阶乘通常简写成 n!

例如: 5! = 1 * 2 * 3 * 4 * 5 = 120

/* factorialize(5) 应该返回一个数字
factorialize(5) 应该返回 120.
factorialize(10) 应该返回 3628800.
factorialize(20) 应该返回 2432902008176640000.
factorialize(0) 应该返回 1.*/
function factorialize(num) {
  // 请把你的代码写在这里
  if (num === 0) {
    return 1;
  } else {
    return num*factorialize(num-1);
  }
}

factorialize(5);
factorialize(10);
factorialize(20);
factorialize(0);

replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式, 替换值可以是一个字符串或者一个每次匹配都要调用的函数。

  • 原字符串不会改变
  • str.replace(regexp|substr, newSubStr|function)
regexp 
(pattern)
一个[RegExp
](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/RegExp) 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。

substr 
(pattern)
一个要被 newSubStr
 替换的
[字符串
](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/String)。其被视为一整个字符串,而不是一个正则表达式。仅仅是第一个匹配会被替换。

newSubStr
 (replacement)
 用于替换掉第一个参数在原字符串中的匹配部分的[字符串
](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/String)。该字符串中可以内插一些特殊的变量名。参考下面的[使用字符串作为参数](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#使用字符串作为参数)。

function
 (replacement)
一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的[指定一个函数作为参数](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#指定一个函数作为参数)。

toLowerCase() 会将调用该方法的字符串值转为小写形式,并返回。

Array.from()

Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
// 字符串也可以转换
Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);

Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]

Array.of()

Array.of方法用于将一组值,转换为数组。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

数组实例的 find() 和 findIndex()

数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。

[1, 4, -5, 10].find((n) => n < 0)
// -5

上面代码中,find方法的回调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。

数组实例的findIndex方法的用法与find方法非常类似,返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。

[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

数组实例的fill()

fill方法使用给定值,填充一个数组。

new Array(3).fill(7)
// [7, 7, 7]

['a', 'b', 'c'].fill(7)
// [7, 7, 7]

fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。

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

推荐阅读更多精彩内容

  • 转载:在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总...
    七色烟火阅读 3,201评论 0 3
  • PHP数组函数,摘录于PHP手册 1、array_change_key_case (PHP 4 >= 4.2.0,...
    kotlin360阅读 691评论 2 1
  • 一、数组定义 array() 1、索引数组 在一个变量中,存储一个或多个值。数组中的每一个元素都有一个访问ID,根...
    竹与豆阅读 523评论 0 0
  • Javascript有很多数组的方法,有的人有W3C的API,还可以去MDN上去找,但是我觉得API上说的不全,M...
    顽皮的雪狐七七阅读 4,040评论 0 6
  • 我在大海的这边眺望着 从近到远 再从远到近 那一个高大的背影 曾步履阑珊的背着我从海的这边到了那边 她的背影注入了...
    Ling_00阅读 207评论 1 4