js去除数组重复成员

js去除数组重复成员

第一种思路是:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中

用到两个函数:for ...in 和 indexOf()

 1  <script type="text/javascript">
 2 var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
 3  function unique(arr){
 4  // 遍历arr,把元素分别放入tmp数组(不存在才放)
 5  var tmp = new Array();
 6  for(var i in arr){
 7  //该元素在tmp内部不存在才允许追加
 8  if(tmp.indexOf(arr[i])==-1){
 9  tmp.push(arr[i]);
10  }
11 }
12  return tmp;
13  }
14  </script>

第二种思路是:把目标数组arr的元素值和键的位置调换 自动就把重复的元素给删除掉了,调换后的样子:array('qiang'=>1,'ming'=>1,'tao'=>1)

 1  <script type="text/javascript">
 2  var student = ['qiang','ming','tao','li','liang','you','qiang','tao'];
 3  function unique(arr){
 4  var tmp = new Array();
 5  for(var m in arr){
 6  tmp[arr[m]]=1;
 7  }
 8  //再把键和值的位置再次调换
 9  var tmparr = new Array();
10  for(var n in tmp){
11  tmparr.push(n);
12  }
13  return tmparr;
14  }
15  </script>

第三种思路是:ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。使用Array.from方法可以将Set结构转为数组的特性,去除数组重复成员

1 let oldarray = [1,2,3,4,4,5]
2 function RemovingArrayRepeating(array) {
3   return Array.from(new Set(array));
4 }
5 RemovingArrayRepeating(oldarray )//[1,2,3,4,5]

 第四种思路是:利用hasOwnProperty

1 function unique(arr) {
2 var obj = {};
3             return arr.filter(function (item, index, arr) {
4                 return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)//利用hasOwnProperty 判断是否存在对象属性 但是无法判断对象是否相同,直接去重
5             })
6 }

第五种思路是:利用Map数据结构去重

 1 function unique(arr) {
 2 let map = new Map();
 3             let array = new Array();
 4             // 数组用于返回结果  
 5             for (let i = 0; i < arr.length; i++) {
 6                 if (map.has(arr[i])) {
 7                     // 如果有该key值
 8                     map.set(arr[i], true);
 9                 } else {
10                     map.set(arr[i], false);
11                     // 如果没有该key值
12                     array.push(arr[i]);
13                 }
14             }
15             return array;//对象不能去重
16 }

第六种思路是:利用reduce+includes

1 function unique(arr) {
2 return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);//对象不能去重
3 }

第七种思路是:利用filter

1 function unique(arr) {
2 return arr.filter(
3                 function (item, index, arr) {
4                     //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素    
5                     return arr.indexOf(item, 0) === index;//直接把NaN干掉
6                 }
7             );
8 }

第八种思路是:利用includes

 1 function unique(arr) {
 2 if (!Array.isArray(arr)) {
 3                 console.log('type error!')
 4                 return
 5             }
 6             var array = []; for (var i = 0; i < arr.length; i++) {
 7                 if (!array.includes(arr[i])) {
 8                     //includes 检测数组是否有某个值 
 9                     array.push(arr[i]);
10                 }
11 
12             }
13             return array;//对象不能去重
14 }

第九种思路是:利用sort()

 1 function unique(arr) {
 2 if (!Array.isArray(arr)) {
 3                 console.log('type error!')
 4                 return
 5             }
 6             arr = arr.sort()
 7             var arrry = [arr[0]];
 8             for (
 9                 var i = 1; i < arr.length; i++) {
10                 if (arr[i] !== arr[i - 1]) {
11                     arrry.push(arr[i]);
12                 }
13             }
14             return arrry;//NaN 对象不能去重
15 }

第十种思路是:利用对象的属性不能相同的特点进行去重

 1 function unique(arr) {
 2     var arrry = [];
 3             var obj = {};
 4             for (var i = 0; i < arr.length; i++) {
 5                 if (!obj[arr[i]]) {
 6                     arrry.push(arr[i])
 7                     obj[arr[i]] = 1
 8                 } else {
 9                     obj[arr[i]]++
10                 }
11             }
12             return arrry;////'NaN' true 对象不能去重
13 }

 第十一种思路是:js根据某字段去重json数组

 1    /**
 2  * 根据某一字段 去重json数组
 3  * @param JsonArray :需要去重的json数组
 4  * @param fieldName :根据此字段去重
 5  */
 6 export function jsonArrayToFilterByFieldName(JsonArray, fieldName) { 
 7   let deduplicateJsonArray = [];
 8   for (let i = 0; i < JsonArray.length; i++) {
 9       let retrieveJson = JsonArray[i];
10       if (i == 0) {
11         deduplicateJsonArray.push(retrieveJson);
12       } else {
13           let filterData = deduplicateJsonArray.filter(function (item) {
14               return item[fieldName] == retrieveJson[fieldName];
15           })
16           if (filterData.length == 0) {
17             deduplicateJsonArray.push(retrieveJson);
18           }
19       }
20   }
21   return deduplicateJsonArray;
22 }

 

posted @ 2018-08-07 17:41  jackson影琪  阅读(1901)  评论(0编辑  收藏  举报