Según un objeto de la matriz a la matriz o más atributos de la especie

En este artículo se describe cómo ordenar por una o más propiedades de un conjunto de objetos.

demanda

Antecedentes devuelven datos para mostrar una cierta secuencia, según la cual uno o más atributos de propiedad.

soluciones

  • Ordenando sola propiedad

    // 创建动态排序函数,根据传递的值对对象进行排序:
    function dynamicSort(property) {
        var sortOrder = 1;
        if(property[0] === "-") {
            sortOrder = -1;
            property = property.substr(1)
        }
        return function (a,b) {
            // 下面一行代码对字符串和数字均有效
            // 你可以根据自己的需求定制它
            var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0
            return result * sortOrder
        }
    }
    
    // 待处理数据
    var data = [
        {name: 'tom4', mdate: '202012'},
        {name:'tom2', mdate:'202001'},
        {name: 'tom1', mdate: '202008'},
        {name: 'tom3', mdate: '202005'}
    ]
    
    // 使用:按照属性 mdate 给data排序
    let sortedArr = data.sort(dynamicSort("mdate"))
    
    
  • Multi-atributo de clasificación

    function dynamicSortMultiple() {
        /*
         * 保存arguments对象,因为它将被覆盖
         * 注意arguments对象是一个类似数组的对象
         * 由要排序的属性的名称组成
         */
        var props = arguments
        return function (obj1, obj2) {
            var i = 0, result = 0, numberOfProperties = props.length
            // 从0开始获取不同的结果,因为有多个属性需要比较
            while(result === 0 && i < numberOfProperties) {
                result = dynamicSort(props[i])(obj1, obj2)
                i++
            }
            return result
        }
    }
    
    // 使用:按照属性 name 和 mdate 给data排序
    let sortedArr = People.sort(dynamicSortMultiple("name", "mdate"));
    
  • También se puede usar ES6, lo que permite que los objetos nativos extendidos

    class MyArray extends Array {
        sortBy(...args) {
            return this.sort(dynamicSortMultiple.apply(null, args))
        }
    }
    
    // 使用:按照属性 mdate 给data排序
    let sortedArr = MyArray.from(data).sortBy("mdate")
    

observación

  • Tenga en cuenta que hay varios atributos de clasificación línea de código dynamicSort(props[i])(obj1, obj2), ya que dynamicSortla función devuelve una función para realizar esta función utiliza dos soportes.
  • f () realiza la función f, devoluciones subrutina.
  • F () () ejecución de la subrutina, el sol devuelve la función.
  • Cuanto más profunda es la más soportes de ejecución

Supongo que te gusta

Origin www.cnblogs.com/codebook/p/12630026.html
Recomendado
Clasificación