js對(duì)象合并的4種方式與數(shù)組合并的4種方式
一、對(duì)象合并
1、拓展運(yùn)算符(...)
ES6入門(mén)中是這樣說(shuō)的:
對(duì)象的擴(kuò)展運(yùn)算符(...)用于取出參數(shù)對(duì)象的所有可遍歷屬性,拷貝到當(dāng)前對(duì)象之中。
let obj1 = { ? ? name: '陳偉停', ? ? gender: '男', ? ? hobby: '唱歌' }; let obj2 = { ? ? name: '陳偉停', ? ? gender: '男', ? ? hobby: '跳舞', ? ? nationality: '中國(guó)' }; ? let obj = {...obj1, ...obj2}; console.log(obj); ?// { name: '陳偉停', gender: '男', hobby: '跳舞', nationality: '中國(guó)' }
由上面的代碼可以看出:
- 同名屬性:合并,并且后邊的(obj2)把前邊的(obj1)覆蓋。
- 不同名屬性:屬性值不變,只合并。
注:第一級(jí)是深拷貝,第二級(jí)開(kāi)始都是淺拷貝。
2、Object.assign()
MDN上是這樣寫(xiě)的:
Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象分配到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象。
用于對(duì)象合并,寫(xiě)法如下:
let obj = Object.assign({}, obj1, obj2); console.log(obj); ?// { name: '陳偉停', gender: '男', hobby: '跳舞', nationality: '中國(guó)' }
由上面的代碼可以看出,效果與法一相同。
注:第一級(jí)是深拷貝,第二級(jí)開(kāi)始都是淺拷貝。
3、遞歸賦值
let obj = obj1; for (var p in obj2){ ? ? if(obj2.hasOwnProperty(p)) ? ? obj[p] = obj2[p]; } console.log(obj); ?// { name: '陳偉停', gender: '男', hobby: '跳舞', nationality: '中國(guó)' }
由上面的代碼可以看出,效果與法一相同。 類(lèi)似于直接賦值增加屬性
注:第一級(jí)是深拷貝,第二級(jí)開(kāi)始都是淺拷貝
4、jquery中的extend()
jQuery.extend() 函數(shù)用于將一個(gè)或多個(gè)對(duì)象的內(nèi)容合并到目標(biāo)對(duì)象。
$.extend(obj1, obj2) ?// 淺拷貝 $.extend(true, obj1, obj2) ?// 深拷貝
二、數(shù)組合并
1、擴(kuò)展操作符
使用ES6語(yǔ)法的拓展運(yùn)算符:這個(gè)方法也是創(chuàng)建一個(gè)新數(shù)組
var newArray = [...array,...elements] console.log(newArray); // ["a", "b", 0, 1, 2]
2、使用array.concat()方法進(jìn)行合并
使用concat方法:這個(gè)方法不是添加到現(xiàn)有數(shù)組,而是創(chuàng)建并返回一個(gè)新數(shù)組。
var array = ["a", "b"]; var elements = [0, 1, 2]; ? var newArray = array.concat(elements); console.log(array); //['a', 'b'] console.log(newArray);// ["a", "b", 0, 1, 2]
3、關(guān)于Apply
使用Apply方法:這個(gè)方法是將數(shù)組各項(xiàng)添加到另一個(gè)數(shù)組當(dāng)中,是一種改變?cè)瓟?shù)組的方法
var array = ["a", "b"]; var elements = [0, 1, 2]; array.push.apply(array, elements); console.log(array); // ["a", "b", 0, 1, 2]
4、array.push()方法進(jìn)行合并
const heroes = ['Batman']; ? heroes.push('Superman'); ? heroes; // ['Batman', 'Superman'] const heroes = ['Batman', 'Superman']; const villains = ['Joker', 'Bane']; ? heroes.push(...villains); ? heroes; // ['Batman', 'Superman', 'Joker', 'Bane']
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
uni-app使用uni-download和uni.saveFile下載保存文件遇到的問(wèn)題及解決方法
這篇文章主要給大家介紹了關(guān)于uni-app使用uni-download和uni.saveFile下載保存文件遇到的問(wèn)題及解決方法的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2024-01-01微信小程序?qū)崿F(xiàn)點(diǎn)擊圖片放大預(yù)覽
這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)點(diǎn)擊圖片放大預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10javascript實(shí)現(xiàn)tab切換特效
這篇文章主要介紹了javascript實(shí)現(xiàn)tab切換特效,實(shí)現(xiàn)的方法很簡(jiǎn)單,特別適合初學(xué)者學(xué)習(xí)javascript實(shí)現(xiàn)tab切換特效,tab切換再也不是問(wèn)題,需要的朋友可以參考下2015-11-11js apply/call/caller/callee/bind使用方法與區(qū)別分析
js apply/call/caller/callee/bind使用方法與區(qū)別分析,需要的朋友可以參考下。2009-10-10JavaScript中關(guān)于遞歸與回溯的實(shí)例詳解
這篇文章主要將為大家介紹一下JavaScript中遞歸與回溯的原理及使用,文中通過(guò)一些例題進(jìn)行了詳細(xì)介紹,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-07-07