欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS數(shù)組操作大全對(duì)象數(shù)組根據(jù)某個(gè)相同的字段分組

 更新時(shí)間:2022年11月04日 09:52:41   作者:fx67ll  
這篇文章主要介紹了JS數(shù)組操作大全對(duì)象數(shù)組根據(jù)某個(gè)相同的字段分組,需要注意的是,在開發(fā)過(guò)程這種數(shù)組的處理函數(shù),應(yīng)當(dāng)被編寫到項(xiàng)目的公共工具函數(shù)庫(kù)中全局調(diào)用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

先說(shuō)點(diǎn)廢話

最近在實(shí)際業(yè)務(wù)中,需要編寫一個(gè)方法根據(jù)數(shù)組中每一個(gè)對(duì)象的一個(gè)相同字段,來(lái)將該字段值相等的對(duì)象重新編入一個(gè)數(shù)組,返回一個(gè)嵌套的數(shù)組對(duì)象,特地來(lái)做個(gè)總結(jié)。
當(dāng)然需要注意的是,在開發(fā)過(guò)程這種數(shù)組的處理函數(shù),應(yīng)當(dāng)被編寫到項(xiàng)目的公共工具函數(shù)庫(kù)中全局調(diào)用

目標(biāo)對(duì)象數(shù)組

let dataArr = [{
		id: 1,
		anyId: 1023,
		anyVal: 'fx67ll',
		value: 'value-1'
	},
	{
		id: 2,
		anyId: 1024,
		anyVal: 'fx67ll',
		value: 'value-2'
	},
	{
		id: 3,
		anyId: 10086,
		anyVal: 'll',
		value: 'value-3'
	},
	{
		id: 1,
		anyId: 10086,
		anyVal: 'fx67',
		value: 'value-4'
	},
	{
		id: 2,
		anyId: 1024,
		anyVal: 'll',
		value: 'value-5'
	},
];

準(zhǔn)換后的對(duì)象數(shù)組

[{
	"key": 1,
	"data": [{
		"id": 1,
		"anyId": 1023,
		"anyVal": "fx67ll",
		"value": "value-1"
	}, {
		"id": 1,
		"anyId": 10086,
		"anyVal": "fx67",
		"value": "value-4"
	}]
}, {
	"key": 2,
	"data": [{
		"id": 2,
		"anyId": 1024,
		"anyVal": "fx67ll",
		"value": "value-2"
	}, {
		"id": 2,
		"anyId": 1024,
		"anyVal": "ll",
		"value": "value-5"
	}]
}, {
	"key": 3,
	"data": [{
		"id": 3,
		"anyId": 10086,
		"anyVal": "ll",
		"value": "value-3"
	}]
}]

編寫函數(shù)的思路

  • 首先肯定是一個(gè)循環(huán),因?yàn)樾枰h(huán)來(lái)比對(duì)數(shù)組中每個(gè)對(duì)象相同的字段的值
  • 其次,根據(jù)比對(duì)的字段值判斷是否存在重復(fù),如果重復(fù)存在新的數(shù)組中,不重復(fù)則添加到之前定義過(guò)的數(shù)組中,完成分組
  • 最后,返回處理完成的對(duì)象數(shù)組

方法一

// arr 目標(biāo)對(duì)象數(shù)組
// filed 分組字段
function classifyArrayGroupBySameFieldAlpha(arr, filed) {
	let temObj = {}
	for (let i = 0; i < arr.length; i++) {
		let item = arr[i]
		if (!temObj[item[filed]]) {
			temObj[item[filed]] = [item]
		} else {
			temObj[item[filed]].push(item)
		}
	}
	let resArr = []
	Object.keys(temObj).forEach(key => {
		resArr.push({
			key: key,
			data: temObj[key],
		})
	})
	return resArr
}

方法二

// arr 目標(biāo)對(duì)象數(shù)組
// filed 分組字段
function classifyArrayGroupBySameFieldVBeta(arr, filed) {
	let temObj = {};
	let resArr = [];
	for (let i = 0; i < arr.length; i++) {
		if (!temObj[arr[i][filed]]) {
			resArr.push({
				key: arr[i][filed],
				data: [arr[i]]
			});
			temObj[arr[i][filed]] = arr[i]
		} else {
			for (let j = 0; j < resArr.length; j++) {
				if (arr[i][filed] === resArr[j].key) {
					resArr[j].data.push(arr[i]);
					break
				}
			}
		}
	}
	return resArr
}

拓展————ES6的新方法Object.keys

  • Object.keys()方法用于返回一個(gè)由一個(gè)給定對(duì)象的自身可枚舉屬性組成的數(shù)組,數(shù)組中屬性名的排列順序和正常循環(huán)遍歷該對(duì)象時(shí)返回的順序一致
  • 需要注意的傳不同類型的變量,返回的數(shù)組值也不同
    • 如果傳入對(duì)象,則返回屬性名數(shù)組
    • 如果傳入字符串,則返回索引
    • 如果數(shù)組,則返回索引
    • 如果構(gòu)造函數(shù),則返回空數(shù)組或者屬性名

到此這篇關(guān)于JS數(shù)組操作大全對(duì)象數(shù)組根據(jù)某個(gè)相同的字段分組的文章就介紹到這了,更多相關(guān)js對(duì)象數(shù)組根據(jù)字段分組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript實(shí)現(xiàn)系統(tǒng)防掛機(jī)(無(wú)操作彈窗)的示例詳解

    JavaScript實(shí)現(xiàn)系統(tǒng)防掛機(jī)(無(wú)操作彈窗)的示例詳解

    在一些學(xué)習(xí)系統(tǒng),或者考試系統(tǒng)中。一旦出現(xiàn)長(zhǎng)時(shí)間未操作,就會(huì)判定這個(gè)人不在場(chǎng)。所以就會(huì)進(jìn)行退出系統(tǒng),處于對(duì)安全和系統(tǒng)負(fù)擔(dān)還有業(yè)務(wù)的需求。本文就來(lái)用JavaScript做一個(gè)系統(tǒng)防掛機(jī)功能,需要的可以參考一下
    2023-01-01
  • JavaScript中一些奇怪的問(wèn)題及解決分享

    JavaScript中一些奇怪的問(wèn)題及解決分享

    JavaScript?在開發(fā)過(guò)程中可能會(huì)出現(xiàn)很多奇怪的問(wèn)題。這篇文章主要為大家整理了一些JavaScript中奇怪的問(wèn)題及解決方法,感興趣的可以了解一下
    2023-03-03
  • js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法

    js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法

    這篇文章主要介紹了js簡(jiǎn)單實(shí)現(xiàn)Select互換數(shù)據(jù)的方法,涉及javascript動(dòng)態(tài)操作select中option節(jié)點(diǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 使用webpack搭建pixi.js開發(fā)環(huán)境

    使用webpack搭建pixi.js開發(fā)環(huán)境

    這篇文章主要介紹了使用webpack搭建pixi.js開發(fā)環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • javascript添加前置0(補(bǔ)零)的幾種方法

    javascript添加前置0(補(bǔ)零)的幾種方法

    很多時(shí)候?yàn)榱孙@示格式,需要在某一字符串不滿位的情況下進(jìn)行前補(bǔ)0操作。下面這篇文章就給大家主要介紹了javascript添加前置0(補(bǔ)零)的幾種方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • toString()一個(gè)會(huì)自動(dòng)調(diào)用的方法

    toString()一個(gè)會(huì)自動(dòng)調(diào)用的方法

    toString方法的作用是不用多說(shuō)的了,這個(gè)JavaScript內(nèi)置方法還有一個(gè)特性是:在執(zhí)行一些特殊方法的時(shí)候,比如alert或innerHTML等方法,它將由腳本解析器自動(dòng)調(diào)用。
    2010-02-02
  • JavaScript淺層克隆與深度克隆示例詳解

    JavaScript淺層克隆與深度克隆示例詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript淺層克隆與深度克隆的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • javascript中的閉包概念與用法實(shí)踐分析

    javascript中的閉包概念與用法實(shí)踐分析

    這篇文章主要介紹了javascript中的閉包概念與用法,結(jié)合具體實(shí)例形式分析了javascript閉包的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-07-07
  • JavaScript第一個(gè)分水嶺之?dāng)?shù)組的基本操作

    JavaScript第一個(gè)分水嶺之?dāng)?shù)組的基本操作

    Arrays(數(shù)組) 數(shù)組是一個(gè)固定長(zhǎng)度的存儲(chǔ)相同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu),數(shù)組中的元素被存儲(chǔ)在一段連續(xù)的內(nèi)存空間中,下面這篇文章主要給大家介紹了關(guān)于JavaScript第一個(gè)分水嶺之?dāng)?shù)組的基本操作,需要的朋友可以參考下
    2022-04-04
  • 用showModalDialog彈出頁(yè)面后,提交表單總是彈出一個(gè)新窗口

    用showModalDialog彈出頁(yè)面后,提交表單總是彈出一個(gè)新窗口

    用showModalDialog彈出頁(yè)面后,提交表單總是彈出一個(gè)新窗口,其實(shí)解決方法很簡(jiǎn)單如下。
    2009-07-07

最新評(píng)論