JavaScript中的多种排序

时间:2017-06-19 05:00:56

标签: javascript arrays sorting

我有一个像这样的对象数组: -

.columns{
  width: 100%;
}
.column{
  height: 100px;
  display: inline-block;
  width: 25%;
  background:red;
  margin-top: 1em;
}

我需要首先按 total 对它们进行排序,然后如果 total 两个是相同的,我需要按 name <对它们进行排序/ p>

排序后我的预期结果如下:

var arr = [ {total : 20, name: David},
{total : 10, name: Joe},
{total : 15, name: Tracy},
{total : 20, name: Joel},
{total : 15, name: Michael},
{total : 10, name: Arnold},
{total : 15, name: Paul},
]

有人能告诉我如何使用Array.sort()对其进行排序吗?

8 个答案:

答案 0 :(得分:2)

您可以使用逻辑OR链接排序条件,并为total使用delta nameString#localeCompare

var array = [{ total: 20, name: 'David' }, { total: 10, name: 'Joe' }, { total: 15, name: 'Tracy' }, { total: 20, name: 'Joel' }, { total: 15, name: 'Michael' }, { total: 10, name: 'Arnold' }, { total: 15, name: 'Paul' }];

array.sort(function (a, b) {
    return b.total - a.total || a.name.localeCompare(b.name);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

使用Array.sort(回调),回调函数有两个参数a,b是arrary中的项目,如果&lt; 0 a lt b,则返回int值,如果= 0则返回eq b else&gt; 0 a b b

arr.sort(function(a,b){
    return a.total == b.total ? (a.name > b.name ? 1: -1) : a.total-b.total;
});

答案 2 :(得分:0)

 if (currentNode->data == nullptr) {
    currentNode->data = new value_type(std::move(pair.first), std::move(pair.second));
    currentNode->incrementSize();
}

就像这样......

答案 3 :(得分:0)

使用sort()方法

var data = [ 
{total : '20', name: 'David'},
{total : '10', name: 'Joe'},
{total : '15', name: 'Tracy'},
{total : '20', name: 'Joel'},
{total : '15', name: 'Michael'},
{total : '10', name: 'Arnold'},
{total : '15', name: 'Paul'},
]

data.sort(function (x, y) {
    var n = x.total - y.total;
    if (n != 0) {
        return n;
    }
    return x.name - y.name;
});

var i;
for (i = 0; i < data.length; i++) {
     document.write("<p>total:" + data[i].total +" name:" + data[i].name + "</p>");
}

这里是runnig代码https://jsfiddle.net/bhupeshkushwaha/jv3mng0y/

答案 4 :(得分:0)

  

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort?v=example

     

sort方法可以方便地与函数表达式(以及闭包)一起使用:

本文讨论了使用Array.sort()

的两种方法

其中一个是您正在寻找的确切解释 - 将compareFunction传递给sort()的方法参数

这将允许您指定任何您想要的功能(在合理范围内)来定义排序顺序。

例如:

arrayname.sort(function(a, b){
    return b-a;
});

将按降序返回已排序的数组

答案 5 :(得分:0)

您可以使用自定义排序功能对数组进行排序。请使用link了解有关排序功能的更多信息。

您可以使用以下代码进行排序。

arr.sort((a,b) => (b.total === a.total ? (a.name > b.name) : b.total - a.total));

以下是您的问题的解决方案。

&#13;
&#13;
var arr = [ {total : 20, name: 'David'},
{total : 10, name: 'Joe'},
{total : 15, name: 'Tracy'},
{total : 20, name: 'Joel'},
{total : 15, name: 'Michael'},
{total : 10, name: 'Arnold'},
{total : 15, name: 'Paul'}];

arr.sort((a,b) => (b.total === a.total ? (a.name > b.name) : b.total - a.total));

console.log(arr);
&#13;
&#13;
&#13;

答案 6 :(得分:0)

您可以提供一个<td><a href='update-process.jsp?id=<%=resultSet.getString("id")%>&first_name=<%=resultSet.getString("first_name")%>&last_name=<%=resultSet.getString("last_name")%>&city_name=<%=resultSet.getString("city_name")%>&email=<%=resultSet.getString("email")%>'>update</a></td> ,其中包含各自指示的按键(按排序顺序):

sortObject

然后,您可以使用该对象循环遍历数组以进行排序:

const sortObject = {
  total: -1, // Descending
  name: 1, // Ascending
};

答案 7 :(得分:0)

&#13;
&#13;
var array = [{ total: 20, name: 'David' }, { total: 10, name: 'Joe' }, { total: 15, name: 'Tracy' }, { total: 20, name: 'Joel' }, { total: 15, name: 'Michael' }, { total: 10, name: 'Arnold' }, { total: 15, name: 'Paul' }];

array.sort(function(a, b) {
  return totalCompare(a, b) || a.name.localeCompare(b.name);
});
function totalCompare(a, b) {
  if (a.total === b.total) {
    return 0;
  }
  return b.total - a.total;
}
console.log(array);
&#13;
&#13;
&#13;