JavaScript-操作数组方法的使用总结一

操作数据的方法有很多,我们在日常开发过程中会经常用到这些方法,今天把这些方法仔细的总结一下。

打开浏览器控制台,输入Array.prototype ,可以查看到Array的方法。
Array.prototype.jpg

常用的方法包含如:concat,every,filter,find,findIndex,forEach,indexOf,lastIndexOf,map,pop,push,reverse,shift,some,sort,splice,toString,unshift等.

首先先了解一下会修改原数组的一些方法:

pop()

该方法会从数组中移除并返回最后一个数组,同时改变数组的长度。如果原数组为空,则返回值为undefined

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var popped = myFish.pop();
console.log(myFish); // ['angel', 'clown', 'mandarin' ] 
console.log(popped); // 'sturgeon'
var myBooks = [];
var book = myBooks.pop();
console.log(myBooks); // [ ] 
console.log(book); // undefined

push()

该方法将一个或多个元素添加到数组的末尾并返回数组的新长度。

var animals = ['pigs', 'goats', 'sheep'];

console.log(animals.push('cows'));// 4

console.log(animals);// ["pigs", "goats", "sheep", "cows"]

animals.push('chickens');

console.log(animals);// ["pigs", "goats", "sheep", "cows", "chickens"]

reverse()

该方法将阵列反转。第一个数组元素成为最后一个,最后一个数组元素成为第一个。

var array1 = ['one', 'two', 'three'];
console.log('array1: ', array1);// ['one', 'two', 'three']

var reversed = array1.reverse(); 
console.log('reversed: ', reversed);// ['three', 'two', 'one']
console.log('array1: ', array1);//   ['three', 'two', 'one']

shift()

该方法从数组中删除第一个元素并返回已删除的元素。此方法更改数组的长度

var array1 = [1, 2, 3];

var firstElement = array1.shift();

console.log(array1);//  [2, 3]

console.log(firstElement);//  1

sort(Fn))

该方法对数组中的元素进行排序并返回已排序的数组。
sort中的Fn是可选的,默认状态排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。

var months = ['March', 'Jan', 'Feb', 'Dec'];

months.sort();

console.log(months);// expected output: Array ["Dec", "Feb", "Jan", "March"]

var array1 = [1, 30, 4, 21, 100000];

array1.sort();

console.log(array1);//[1, 100000, 21, 30, 4]

sort 中的fn(a,b)是用于指定定义排序顺序的函数。如果省略,则将数组元素转换为字符串,然后根据每个字符的[Unicode]代码点值进行排序。
a 第一个用于比较的元素。
b 第二个要素进行比较
如果fn(a, b)小于0,则排序a为低于b (即a先到达)的索引。
如果fn(a, b)返回0,离开a,并b相对于彼此不变,但对于所有不同的元素进行排序。
如果fn(a, b)大于0,则排序b为低于a (即b首先出现)的索引。

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);// [1, 2, 3, 4, 5]
var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];

// 按值排序
items.sort(function (a, b) {
  return a.value - b.value;
});

// 按名字排序
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // 忽略大小写
  var nameB = b.name.toUpperCase(); // 忽略大小写
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  // 名称相同的情况
  return 0;
});

splice()

该方法通过删除或替换现有元素和/或[在适当位置]添加新元素来更改数组的内容。
var arrDeletedItems = array .splice(start [,deleteCount [,e1 [,e2 [,...]]]])
start: 要开始更改数组的索引。如果大于数组的长度,start则将设置为数组的长度。如果是负数,它将从数组的末尾开始有许多元素(原点为-1,意思是-n是第n个最后一个元素的索引,因此等于索引array.length - n)。如果绝对值 start大于数组的长度,则它将从索引0开始。
deleteCount :可选,一个整数,指示要从中删除的数组中的元素数。
如果deleteCount省略,或者它的值等于或大于array.length - start(即,如果它等于或大于数组中剩余的元素数,从start开始),那么所有元素从start 数组到结尾将被删除。
如果deleteCount为0或负数,则不删除任何元素。在这种情况下,您应该至少指定一个新元素。
item1, item2, ... 可选的
要添加到数组的元素,从 start开始。如果未指定任何元素,splice()则只会从数组中删除元素。
arrDeletedItems:包含已删除元素的数组。如果仅删除一个元素,则返回一个元素的数组。如果未删除任何元素,则返回空数组

例子:从索引2中删除0(零)元素,并插入“drum”
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum');

// myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"] 
// removed = []

例子:从索引2中删除1个元素,然后插入“trumpet”

var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, 'trumpet');

// myFish = ["angel", "clown", "trumpet", "sturgeon"]
// removed = ["drum"]

unshift()

该方法将一个或多个元素添加到数组的开头,并返回数组的新长度。
var lastLength = arr.unshift(e1 [,... [,en ]])
en:要添加到数组前面的元素。
lastLength:返回新数组的长度。

let arr = [4,5,6];
arr.unshift(1,2,3);
的console.log(arr); // [ 1,2,3,4,5,6 ]

arr = [4,5,6]; //重置数组
arr.unshift(1);
arr.unshift(2);
arr.unshift(3);
console.log(arr); // [ 3,2,1,4,5,6]

let arr = [1, 2];

var lastLength = arr.unshift(0); // lastLength = 3
// arr = [0, 1, 2]

lastLength = arr.unshift(-2, -1); // lastLength = 5
// arr = [-2, -1, 0, 1, 2]

lastLength = arr.unshift([-4, -3]); // lastLength =  6
// arr = [[-4, -3], -2, -1, 0, 1, 2]

lastLength = arr.unshift([-7, -6], [-5]); //lastLength= 8
// arr = [ [-7, -6], [-5], [-4, -3], -2, -1, 0, 1, 2 ]

今天就先总结一下会改变原始数组的一些方法。下次再讲一讲不会改变原始数组,但是会返回一些数组的特定属性的方法。

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