Alphabetize javascript for循环

时间:2017-02-03 06:07:13

标签: javascript jquery

我得到了理想的结果,但需要按字母顺序排序。我不确定在代码中应该放入什么:

function showClients(data) {
    var html = '';
    for (var clientId in data) {
        html += '<p>' + clientId;
        html += data[clientId].connected ? ' connected' : ' disconnected';
        html += '</p>';
    }
    if (!html) {
        html += '<p>No clients connected</p>';
    }
    $('#connected_clients').html(html);
}

2 个答案:

答案 0 :(得分:1)

如果我的数据结构布局正确,它就是一个键/值对象,它又包含具有连接等信息的对象。

在这种情况下,您可以先使用Object.keys获取密钥,对Object.keys(data).sort()进行排序,然后从那里创建html。例如:

function showClients(data) {
    var html = Object.keys(data).sort().reduce(function(h, clientId){
        return h + '<p>' + clientId
        + (data[clientId].connected ? ' connected' : ' disconnected')
        + '</p>';
    }, '')
        || '<p>No clients connected</p>';

    $('#connected_clients').html(html);
}

function showClients(data) {
    var html = Object.keys(data).sort().reduce(function(h, clientId){
    	return h + '<p>' + clientId
        + (data[clientId].connected ? ' connected' : ' disconnected')
        + '</p>';
    }, '')
    	|| '<p>No clients connected</p>';
    
    $('#connected_clients').html(html);
}


showClients({Client3:{connected:true},Client1:{connected:true},Client2:{connected:false}});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id=connected_clients></div>

答案 1 :(得分:0)

sort等数据致电Array.prototype.sort(data)。如果您没有通过比较功能,它将按字母顺序对元素进行排序。

function showClients(data) {
    var html = '';
    for (var clientId in Array.prototype.sort.call(data)) {
        html += '<p>' + clientId;
        html += data[clientId].connected ? ' connected' : ' disconnected';
        html += '</p>';
    }
    if (!html) {
        html += '<p>No clients connected</p>';
    }
    $('#connected_clients').html(html);
}