js怎麼判斷一個陣列物件裡面有重複的值,並且刪除重複的值只保留一個例如var arr = [{name:'a'},{name:'b'}, {name:'c'},{name:'d'},{name:'a'}] 怎麼比較
var arr = [{name:'a'},{name:'b'}, {name:'c'},{name:'d'},{name:'a'}]
Following the voice in heart.
可以雙for循環去找,用第一個和後面挨個對比,重複則刪除,在從第二個找,在向後對比,重複則刪除
const del = (arr) => { for( let i=0;i<arr.length;i++) { for(let j=i+1;j<arr.length;j++) { if (arr[i].id==arr[j].id) { arr.splice(j,1); i--; } } } return arr; }
突發奇想寫的。 。 。不知道是否滿足所有要求。 。 。哈哈
方法一:
const del = (arr)=>{ let map = []; for(let i = 0; i < arr.length; i++) { let key = JSON.stringify(arr[i]); if(map.includes(key)) { arr.splice(i, 1); i--; } else { map.push(key); } } return arr; }
方法二:
const del = arr=>Array.from(new Set(arr.map(a=>JSON.stringify(a)))).map(a=>JSON.parse(a))
temp.indexOf ( arr[i].name ) = -1;
res.push(arr[i]);
數組去重方法比較多,你還可以有更好的方法
arr 是一維數組 而且元素是物件。 要處理的內容是該物件下的 name 屬性。
name
var arr = [{name:'a'},{name:'b'},{name:'c'},{name:'d'},{name:'a'}]
遍歷他,然後在每次遍歷的 item 基礎上再遍歷一次 arr 挨個對比 如果發現重複就留個記錄
item
arr
var logger = (a, b) => { console.group('谁重复了?'); console.log('元素:', a); console.log('下标:', b); console.groupEnd(); } // 遍历 arr.filter((item, idx, its) => { // 一旦发现有重复的元素就返回 true (通过 its.some 注意他的两个参数 e 和 idx2) // 无重复的过滤掉 return its.some((e, idx2) => { return (e.name === item.name && idx2 !== idx); }); }).forEach(logger);
// 陣列去重// 有key表示是複雜陣列去重,根據陣列中物件的屬性key來去重function arrUniq(arr, key) {
if (!Array.isArray(arr) || arr.length < 2) { return arr; } // 简单数组去重 if (!key) { return Array.from(new Set(arr)); } // 复杂数组去重 var obj = {}, res = []; arr.forEach((item) => { if (!obj[item[key]]) { res.push(item); obj[item[key]] = true; } }); return res;
}
可以雙for循環去找,用第一個和後面挨個對比,重複則刪除,在從第二個找,在向後對比,重複則刪除
突發奇想寫的。 。 。不知道是否滿足所有要求。 。 。哈哈
方法一:
方法二:
temp.indexOf ( arr[i].name ) = -1;
res.push(arr[i]);
數組去重方法比較多,你還可以有更好的方法
原料
arr 是一維數組 而且元素是物件。 要處理的內容是該物件下的
name
屬性。處理思路
遍歷他,然後在每次遍歷的
item
基礎上再遍歷一次arr
挨個對比 如果發現重複就留個記錄ScreenShot
// 陣列去重
// 有key表示是複雜陣列去重,根據陣列中物件的屬性key來去重
function arrUniq(arr, key) {
}