根据某个对象属性对数组进行排序

对数组排序可以使用sort()方法,它的比较函数接收两个参数,即要比较的值。我们只需要定义一个函数,这个函数接收一个属性名,然后根据这个属性名来创建一个比较函数,这样就可以根据某个对象属性对数组进行排序了。

var data = [
    {
        name: "frank",
        age: 10
    },
    {
        name: "ciel",
        age: 20
    }
];

function compare(propertyName) {
    return function(obj1, obj2) {
        var value1 = obj1[propertyName];
        var value2 = obj2[propertyName];
        if (value1 < value2) {
            return -1;
        } else if (value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    }
}

data.sort(compare("name"));
console.log(data[0].name); //ciel

data.sort(compare("age"));
console.log(data[0].name); //frank

上面的例子默认是按照升序类排列的,如果我们想换成降序排列,就需要修改比较方法的返回值。还有一种更灵活的方法,就是多加一个标识是升序还是降序的参数,如果不传这个参数,默认升序排列。

var data = [
    {
        name: "frank",
        age: 10
    },
    {
        name: "ciel",
        age: 20
    }
];

function compare(propertyName, isAscending) {
    if(isAscending === undefined) {
        isAscending = 1;
    } else {
        isAscending = isAscending ? 1 : -1;
    }

    return function(obj1, obj2) {
        var value1 = obj1[propertyName];
        var value2 = obj2[propertyName];
        if (value1 < value2) {
            return isAscending * -1;
        } else if (value1 > value2) {
            return isAscending * 1;
        } else {
            return 0;
        }
    }
}
data.sort(compare("name", false));
console.log(data[0].name); //frank

data.sort(compare("age", false));
console.log(data[0].name); //ciel
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,092评论 0 1
  • 转载:在开发中,数组的使用场景非常多,平日中也涉及到很多数组的api/相关操作,一直也没有对这块内容进行一块整理总...
    七色烟火阅读 3,250评论 0 3
  • 本章内容 使用对象 创建并操作数组 理解基本的 JavaScript 类型 使用基本类型和基本包装类型 引用类型的...
    闷油瓶小张阅读 697评论 0 0