数组根据去重

100 阅读1分钟
<div id="app"></div>
var jsonArr = [
	{
		id: 1,
		name: '苹果',
		price: 3,
	},
	{
		id: 2,
		name: '苹果',
		price: 5,
	},
	{
		id: 3,
		name: '梨子',
		price: 6,
	},
	{
		id: 4,
		name: '苹果',
		price: 5,
	},
	{
		id: 5,
		name: '苹果',
		price: 5,
	},
	{
		id: 6,
		name: '梨子',
		price: 6,
	}
];
/**
 * @param {Object} data 需要去重的数组
 * @param {Object} name 去重的关键字
 * @param {Object} update 返回新数组的健名 Array() 数组格式
 * return 返回json数组格式的数据
 */
let groudFun = function(data, name, update) {
	if(!data) return '未传入数组';
	if(!name) return '未传入关键字';
	if(!update) return '未传入新数组健名';
	let arr = [].concat(data);
	data.map((item, index) => {
		for(let i=index+1; i<arr.length; i++) {
			let items = data[i];
			if(index != i) {
				if(item[name] == items[name]) {
					arr.splice(i,1)  //相同的字段只保留第一个,其余的全部删除
				}
			}
		}
	});
	let arr2 = [];
	arr.map(item=>{
		arr2.push(item[name])  //将去重的数组,name字段的值单独存放在arr2中
	});
	let obj = {};
	arr2.map(item=>{
		let as = [];
		data.map((items, index) => {
			if(item == items[name]){
				let objs = {}
				update.map(ups=>{
					objs[ups] = items[ups];  //根据传入的update数组的值,作为健名添加到objs对象中
				})
				as.push(objs);
			}
		});
		obj[item] = as;  //将每一次遍历得到的json数组存入obj中
	});
	return obj  //返回处理好的obj对象
}
let newArry = groudFun(jsonArr, 'name', ['price', 'id']);
document.write(JSON.stringify(newArry));
console.log(newArry);
// 根据name去重,然后将所有name相同数据中的price、id字段提出来重组为新的数组: 
// {"苹果":[{"price":3,"id":1},{"price":5,"id":2},{"price":5,"id":4},{"price":5,"id":5}],"梨子":[{"price":6,"id":3},{"price":6,"id":6}]}