javascript - js判断一个数组是否重复
问题描述
js怎么判断一个数组对象里面有重复的值,并且删除重复的值只保留一个比如 var arr = [{name:’a’},{name:’b’},{name:’c’},{name:’d’},{name:’a’}] 怎么对比
问题解答
回答1:可以双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;}回答2:
突发奇想写的。。。不知道是否满足所有要求。。。哈哈
方法一:
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))回答3:
temp.indexOf ( arr[i].name ) = -1;
res.push(arr[i]);
数组去重方法比较多,你还可以有更好的方法
回答4:原材料arr 是一维数组 而且元素是对象。 要处理的内容是该对象下的 name 属性。
var arr = [{name:’a’},{name:’b’},{name:’c’},{name:’d’},{name:’a’}]处理思路
遍历他,然后在每次遍历的 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); ScreenShot

// 数组去重// 有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;
}
相关文章:
1. javascript - 百度坐标,返回目标附近有哪些坐标2. javascript - 关于jsp中嵌入js代码的问题3. javascript - 判断用户网络环境4. javascript - 对不同类别的id的物品中的某个字段做权重覆盖,除了直接使用if else语句还能有更优雅便于维护的方式吗?5. javascript - 一个JS多元运算符的问题6. javascript - 关于fullpage.js的横向滚动控制7. javascript - 为什么var obj = {}创建对象的方法里面不能用this.xxx来声明属性 ?8. javascript - 有什么兼容性比较好的办法来判断浏览器窗口的类型?9. javascript - 有一个异步获取数据的函数A,其他依赖这个A得到的数据的函数是否都必须是异步的?10. angular.js - angurlarJS的安卓的微信端中用加载ngCookies会出错的问题

网公网安备