数组去重的5种办法有哪些?
数组去重的5种办法:
办法一:
两重for轮回去重
原理 两两比拟假如相等的话就删除了第二个
例如: 1 1 1 3 2 1 2 4
先让第一个1 即arr[0]与前面的一个个比拟 假如前面的值等于arr[0] 删除了前面的值
第一次完结后的后果是 1 3 2 2 4 删除了了前面一切的1
同理 第二次 第三会删除了与本人相反的元素
function noRepeat1(arr){ // 第一层for用来管制轮回的次数 for(var i=0; i<arr.length; i++){ //第二层for 用于管制与第一层比拟的元素 for(var j=i+1; j<arr.length; j++){ //假如相等 if(arr[i] == arr[j]){ //删除了前面的 即第 j个地位上的元素 删除了个数 1 个 arr.splice(j,1); // j--很要害的一步 假如删除了 顺序就会犯错 //j--的缘由是 每一次应用splice删除了元素时 前往的是一个新的数组 // 这象征这数组下次遍历是 比拟市跳过了一个元素 /* 例如: 第一次删除了后 前往的是 1 1 3 2 1 2 4 * 然而第二次遍历是 j的值为2 arr[2] = 3 * 相称于跳过一个元素 因而要 j-- * */ j--; } } } return arr; }
办法二:
单层for轮回
原理以及办法一类似
function norepeat(arr){ arr.sort(); //先排序让大略相反的正在一个地位,这里为何说是大略相反 是由于sort排序是把元素当字符串排序的 它以及可能排成 1 1 10 11 2 20 3 ... 没有是咱们想要的从小到年夜 for(var i = 0; i < arr.length-1;i++){ //仍是两两比拟 同样删除了前面的 if(arr[i]==arr[i+1]){ arr.splice(i,1); //i-- 以及j--同理 i--; } } return arr; }
办法三:
原理:用一个空数组去存初次呈现的元素
行使 indexOf 属性 indexOf是前往某个指定的字符正在字符串中呈现的地位,假如不就会前往-1
因而咱们能够很好的行使这个属性 当前往的是 -1时 就让其存入数组
function noRepeat2(arr){ var newArr = []; for(var i = 0; i < arr.length; i++){ if(newArr.indexOf(arr[i]) == -1){ newArr.push(arr[i]); } } return newArr; }
办法四:
原理:行使工具的思维,假如工具里不这个属性的话就会前往undefined
行使这个原理应前往的是undefined时让其放入数组而后正在给这个属性赋值
function norepeat3(arr) { var obj = {}; var newArr = []; for(var i = 0; i < arr.length; i++) { if(obj[arr[i]] == undefined) { newArr.push(arr[i]); obj[arr[i]] = 1; } } return newArr; }
办法五:
原理:轮回比拟假如相等的让前面的元素值为0,最初正在输入的时分删除了为0的这个条件是你的数据里不克不及有0,然而凡事能够变通你能够设置任何值代替这个0,这个办法是我过后想到完成的以是不进行很好的优化。
var newArr = []; //管制外轮回 for(var i=0; i<arr.length-1;i++){ //内存轮回 只比拟前面的 for(j=i+1;j<arr.length;j++){ //假如相等就让其值等于0 if(arr[i]==arr[j]){ arr[j]=0; } } //去除了值为0的 if(arr[i]==0){ continue; }else{ //放入新的数组 newArr.push(arr[i]); } }
保举教程:《PHP视频教程》
以上就是数组去重的5种办法有哪些?的具体内容,更多请存眷资源魔其它相干文章!
标签: php教程 php故障解决 php使用问题 数组去重
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!