@[TOC]
方法一 reduce
/*
* json数组去重
* @param: {Array} jsonArr 去重之前的数组
* @param {String} field 需要去重的字段值
* @return {Array} 去重之后的数组
*/
export function uniqueJsonArrByField(jsonArr, field) {
// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据
if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;
const uniqueArr = jsonArr.reduce((all, next) => all.some((item) => item[field] == next[field]) ? all : [...all, next], []);
return uniqueArr;
}
方法二 filter和Map
/**
* json数组去重
* @param {Array} jsonArr 去重之前的数组
* @param {String} field 需要去重的字段值
* @return {Array} 去重之后的数组
*/
export function uniqueJsonArrByField(jsonArr, field) {
// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据
if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;
const res = new Map(); // 标识对象
const uniqueArr = jsonArr.filter((item) => !res.has(item[field]) && res.set(item[field], true));
return uniqueArr;
}
方法三 变异for
/**
* json数组去重
* @param {Array} jsonArr 去重之前的数组
* @param {String} field 需要去重的字段值
* @return {Array} 去重之后的数组
*/
export function uniqueJsonArrByField(jsonArr, field) {
// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据
if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;
let obj = {}; // 标识对象
let uniqueArr = [];
for(let i = 0; i<jsonArr.length; i++) {
if(!obj[jsonArr[i][field]]){
uniqueArr.push(jsonArr[i]);
obj[jsonArr[i][field]] = true;
}
}
return uniqueArr;
}
方法四 for + filter
/**
* json数组去重
* @param {Array} jsonArr 去重之前的数组
* @param {String} field 需要去重的字段值
* @return {Array} 去重之后的数组
*/
export function uniqueJsonArrByField(jsonArr, field) {
// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据
if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;
let uniqueArr = [jsonArr[0]];
for (let i = 1; i < jsonArr.length; i++) {
let item = jsonArr[i];
let filterData = uniqueArr.filter(function (f_item) {
return item[field] && f_item[field] == item[field];
});
if (filterData.length == 0) { // 如果uniqueArr中不存在item
uniqueArr.push(item);
}
}
return uniqueArr;
}
方法五 for
/*
* json数组去重
* @param: {Array} jsonArr 去重之前的数组
* @param {String} field 需要去重的字段值
* @return {Array} 去重之后的数组
*/
export function uniqueJsonArrByField(jsonArr, field) {
// 数组长度小于2 或 没有指定去重字段 或 不是json格式数据
if (jsonArr.length < 2 || !field || typeof jsonArr[0] !== "object") return jsonArr;
let uniqueArr = [jsonArr[0]];
for (let i = 1; i < jsonArr.length; i++) {
let item = jsonArr[i];
let repeat = false; // 标识位
for (let j = 0; j < uniqueArr.length; j++) {
if (item[field] && item[field] == uniqueArr[j][field]) {
repeat = true;
break;
}
}
if (!repeat) {
uniqueArr.push(item);
}
}
return uniqueArr;
}
脑筋急转弯小程序抢先体验
程序员专属工具箱
✍创作不易,求关注😄,点赞👍,收藏⭐️