javscript巧用对象特性去掉数组重复项并排序

当有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后运行alert(a[0]),两种情况下的运行结果都是1,这就是说,数据集合既可以用数组表示,也可以用对象表示!但是我们是无法定义一个具有两个相同key值的object,而我们正可以利用这种特性来去掉数组中的重复项。

  • 把数组转成一个js对象
  • 把数组中的值变成对象中的key
  • 把对象还原成数组
//把数组转成一个js对象
function toObj(arr){
    var obj = {};
    for(var i=0;i<arr.length;i++){
        obj[arr[i]] = true;
    }
    return obj;
}
function objkeys(obj){
    var arr = [];
    for(var attr in obj){
        if(obj.hasOwnProperty(attr)){  //使用hasOwnProperty比较严谨
            arr.push(attr);
        }
    }
    return arr;
}
function uniq(arr){
    return objkeys(toObj(arr));
}
var arr1 = [4,5,2,56,56,54,4,4,2,9,10]
alert(uniqSort(arr1));        //2,4,5,9,10,54,56

我们发现用这种方法不但可以给去重而且还可以排序,一举两得!

上面提到的hasOwnProperty方法说明下:

JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。 使用方法:
object.hasOwnProperty(proName)
其中参数object是必选项。一个对象的实例。
proName是必选项。一个属性名称的字符串值。

如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true;反之则返回 false。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。在下例中,所有的 String 对象共享一个公用 split 方法。下面的代码将输出 false 和 true。 
var s = new String("JScript");

print(s.hasOwnProperty("split"));

print(String.prototype.hasOwnProperty("split"));

另外在说一下其它我们常用的方法的思路

1.构建一个新的数组存放结果

2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比

3.若结果数组中没有该元素,则存到结果数组中

-------------------

1.先将原数组进行排序

2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置

3.如果不相同,则将该元素存入结果数组中

-------------------

1.创建一个新的数组存放结果

2.创建一个空对象

3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中

  • 上面的方法代码就不展示了,百度都有,第二种方法有局限性在于它打破了数组原先的排序!
时间: 2024-10-23 19:29:39

javscript巧用对象特性去掉数组重复项并排序的相关文章

PHP去掉数组重复值二种方法实例

PHP两种去掉数组重复值的方法,分别使用foreach方法和array_unique方法. 去除一个数组中的重复值,可以使用foreach方法,也可以使用array_unique方法. <?php $arrF = array(); $arrS = array(); $intTotal = 100; $intRand = 10; for($i=0; $i < $intTotal; $i++) { $arrF[] = rand(1, $intRand); $arrS[] = rand(1, $in

js去除数组重复项

原文:js去除数组重复项 第一次写,感觉不知道写啥,想了半天决定还是用以前用过的一些东西,看了看就写数组去除重复项算了^_^. 去除数组重复项有很多方法,之前因为用到,看了一下以前搜集的一些代码,进行比较,在这里总结一下,希望能给各位有所帮助,有什么问题,请各位大神不吝指导. 方法一: //两个for循环 Array.prototype.delRepeat1 = function () { var r = new Array(); label: for (var i = 0, n = this.

算法-利用object的key唯一性删除数组重复项

# 利用object的key唯一性删除数组重复项 # uniq.html <!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>Document</title>   <script type="text/javascript">        var arr=[12,34,2

26,27删除数组重复项

目录 26,27删除数组重复项 题目 双指针法 题26解法 题27解法一 题27解法二 26,27删除数组重复项 题目 题目26 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 题

去掉数组重复的元素

问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素.输入格式 10个整数.输出格式 多行输出,每行一个元素.样例输入2 2 3 3 1 1 5 5 5 5样例输出123 5 代码: import java.util.*;public class Shuzupaixuchuchong {    public static void fun(int arr[])    {          int length=arr.length;         // 共有3个for循环

删除有序数组重复项1--Remove Duplicates from Sorted Array

https://leetcode.com/problems/remove-duplicates-from-sorted-array/ Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space

用哈希表去数组重复项,有详细注释

这个我不懂,男朋友给我讲了一遍,我还是不太明白,于是自己带入实例一个一个理了一遍,写上了很详细的注释,如果有人能看到,并且和我一样不太理解,希望看到这个就都能懂哈,哎学习中的菜鸟伤不起~ var countArr = [1, 2, 1]; function unique(arr) { var resultArr = [], hash = {}; //定义返回的数组,和哈希表 for (var i = 0, elem; (elem = arr[i]) != null; i++) { //for循环

javascript对象,php数组以键名排序

javascript:a. 代码: /* @desc:json对象以键名排序 */ function ksort(obj){ var ret = {} for(var i in obj){ ret[i] = obj[i] } return ret } b. 测试: var obj = { "3":"c", "6":"a", "2":"b" } var ret = ksort(obj) c

js快速去除数组重复项

1 function unique1(arr) { 2 var tmp = new Array(); 3 tmp.push(arr[0]); 4 for(var i=0;i<arr.length;i++) 5 { 6 for(var j=0;j<i;j++) 7 { 8 var k=i-1; 9 if(arr[i]==arr[j]) 10 break; 11 else if(j==k) 12 tmp.push(arr[i]); 13 } 14 } 15 return tmp; 16 }