摘要:添加元素到數(shù)組合并兩個(gè)數(shù)組錯(cuò)誤方法應(yīng)該用方法,將被的數(shù)組當(dāng)成參數(shù)數(shù)組。會(huì)改變數(shù)組,返回最新屬性,占用內(nèi)存較少。
一、Array.prototype.concat()
concat方法將創(chuàng)建一個(gè)新的數(shù)組,然后將調(diào)用它的對(duì)象(this指向的對(duì)象)中的元素以及所有參數(shù)中的數(shù)組類型的參數(shù)中的元素以及非數(shù)組類型的參數(shù)本身按照順序放入這個(gè)新數(shù)組,并返回該數(shù)組。
concat方法并不修改調(diào)用它的對(duì)象(this指向的對(duì)象)和參數(shù)中的各個(gè)數(shù)組本身的值,而是將他們的每個(gè)元素拷貝一份放在組合成的新數(shù)組中。原數(shù)組中的元素有兩種被拷貝的方式:
對(duì)象引用(非對(duì)象直接量):concat方法會(huì)復(fù)制對(duì)象引用放到組合的新數(shù)組里,原數(shù)組和新數(shù)組中的對(duì)象引用都指向同一個(gè)實(shí)際的對(duì)象,所以,當(dāng)實(shí)際的對(duì)象被修改時(shí),兩個(gè)數(shù)組也同時(shí)會(huì)被修改,如:原數(shù)組和新數(shù)組里都有一個(gè)對(duì)象obj,如果改變其屬性,則原數(shù)組與新數(shù)組里的obj屬性都發(fā)生變化。
字符串和數(shù)字(是原始值,而不是包裝原始值的String和Number對(duì)象):concat方法會(huì)復(fù)制字符串和數(shù)字的值放到新數(shù)組里。
var alpha = ["a", "b", "c"]; var numeric = [1, 2, 3]; // 組成新數(shù)組 ["a", "b", "c", 1, 2, 3]; 原數(shù)組 alpha 和 numeric 未被修改 var alphaNumeric = alpha.concat(numeric);
var num1 = [1, 2, 3]; var num2 = [4, 5, 6]; var num3 = [7, 8, 9]; // 組成新數(shù)組[1, 2, 3, 4, 5, 6, 7, 8, 9]; 原數(shù)組 num1, num2, num3 未被修改 var nums = num1.concat(num2, num3);
var alpha = ["a", "b", "c"]; // 組成新數(shù)組 ["a", "b", "c", 1, 2, 3], 原alpha數(shù)組未被修改 var alphaNumeric = alpha.concat(1, [2, 3]);二、Array.prototype.push()
push()方法添加一個(gè)或多個(gè)元素到數(shù)組的末尾,并返回?cái)?shù)組新的長(zhǎng)度(length屬性值)。
arr.push(element1, ..., elementN)
var sports = ["soccer", "baseball"]; var total = sports.push("football", "swimming"); console.log(sports); // ["soccer", "baseball", "football", "swimming"] console.log(total); // 4
錯(cuò)誤方法
var sports1 = ["soccer", "baseball"]; var sports2 = ["football", "swimming"]; var total = sports1.push(sports2); /* or */ var total = Array.prototype.push.call(sports1, sports2); console.log(sports1); // ["soccter", "baseball", ["football", "swimming"]]
應(yīng)該用apply方法,將被push的數(shù)組當(dāng)成參數(shù)數(shù)組。
var sports1 = ["soccer", "baseball"]; var sports2 = ["football", "swimming"]; var total = Array.prototype.push.apply(sports1, sports2); console.log(sports1); // ["soccter", "baseball", "football", "swimming"]三、選擇哪個(gè)方法
Array.prototype.concat()返回一個(gè)新數(shù)組,不會(huì)改變?cè)瓟?shù)組,但是會(huì)占用較多內(nèi)存。
Array.prototype.push()會(huì)改變this數(shù)組,返回最新length屬性,占用內(nèi)存較少。
參考:
Array.prototype.concat() - MDN
Array.prototype.push() - MDN
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/79524.html
摘要:可以看到,方法,簡(jiǎn)潔高效,且能實(shí)現(xiàn)多個(gè)數(shù)組合并并且能夠?qū)崿F(xiàn)深度嵌套注意最后還是使用了哦,換成是不可以的。多個(gè)數(shù)組合并原生的方法可以簡(jiǎn)單實(shí)現(xiàn)多個(gè)數(shù)組合并,比如會(huì)返回至于其他方法,應(yīng)該只是一個(gè)接口的問題,可以像下面這樣實(shí)現(xiàn)。 網(wǎng)易前端面試的時(shí)候,面試官問我有幾種數(shù)組合并的方法,當(dāng)時(shí)第一反應(yīng)就是concat,但是面試官說幾種,我尋思著原生js方法好像也只有concat呀,就說不改變?cè)瓟?shù)組的話...
摘要:對(duì)于一些小數(shù)組來說,這樣做當(dāng)然沒有問題。第一個(gè)主要問題在于,我們將要追加的數(shù)組的元素?cái)?shù)量翻倍了當(dāng)然是臨時(shí)性的,因?yàn)閷?shí)質(zhì)上要將數(shù)組內(nèi)容拷貝到函數(shù)調(diào)用棧上。所以,假如要追加的數(shù)組中有一百萬個(gè)元素,那么幾乎一定會(huì)超過函數(shù)和的調(diào)用棧限制的大小。 原文鏈接: https://davidwalsh.name/combi... 這是一篇介紹 JavaScript 技術(shù)的小短文。我們將會(huì)講到組合/合并...
array.push.apply() 該方法會(huì)改變?cè)瓟?shù)組 var arr1 = [1,2]; var arr2 = [aa,as]; arr1.push.apply(arr1, arr2); console.log(arr1); //[1, 2, aa, as] console.log(arr2); //[aa, as] n個(gè)數(shù)組合并成一個(gè)數(shù)組 var obj = { 1...
摘要:數(shù)組常用方法介紹刪除數(shù)組最后一位元素。開始下標(biāo)刪除個(gè)數(shù),插入元素可以多個(gè)注意當(dāng)數(shù)組執(zhí)行上面的這些方法時(shí),都會(huì)修改原數(shù)組。輸出從數(shù)組中找出所有符合指定條件的元素。內(nèi)容返回將數(shù)組合成一個(gè)值。合并數(shù)組或合并數(shù)組的值。 JavaScript 數(shù)組常用方法介紹 array.pop – 刪除數(shù)組最后一位元素。 var arr = [1, 2, 3]; arr.pop();// 返回 3 arr;/...
閱讀 1766·2023-04-25 20:16
閱讀 4035·2021-10-09 09:54
閱讀 2785·2021-09-04 16:40
閱讀 2575·2019-08-30 15:55
閱讀 890·2019-08-29 12:37
閱讀 2798·2019-08-26 13:55
閱讀 2961·2019-08-26 11:42
閱讀 3221·2019-08-23 18:26