数组中的多个数据,但只按名称

时间:2016-06-14 11:47:15

标签: javascript arrays list sorting

我有一个目前只有名字的数组,因为我无法弄清楚如何添加更多信息但不能让脚本对该数据进行排序。对于数组中的每个条目,我希望为每个条目添加1-20之间的数字,以及为该名称命名的数量。所以它会像1.尼尔森(100,000)。这只是我的第二个功能的问题,因为我需要按长度排序。

<script>
    var arr = []
    arr[0] = " Nielsen"
    arr[1] = " Jensen"
    arr[2] = " Hansen"
    arr[3] = " Pedersen"
    arr[4] = " Andersen"
    arr[5] = " Christensen"
    arr[6] = " Larsen"
    arr[7] = " Sørensen"
    arr[8] = " Rasmussen"
    arr[9] = " Jørgensen"
    arr[10] = " Petersen"
    arr[11] = " Madsen"
    arr[12] = " Kristensen"
    arr[13] = " Olsen"
    arr[14] = " Thomsen"
    arr[15] = " Christiansen"
    arr[16] = " Poulsen"
    arr[17] = " Johansen"
    arr[18] = " Møller"
    arr[19] = " Mortensen"

    document.getElementById("liste").innerHTML = arr; // Skriver den oprindelige rækkefølge

    function Sorter1() {
        arr.sort(); // Sorter efter aflabetisk rækkefølge
        document.getElementById("liste").innerHTML = arr; // Skriver rækkefølgen
    }

    function Sorter2() {
        arr.sort(function (a, b) {
            return b.length - a.length || // sorter efter længde
                a.localeCompare(b); // Sorter efter aflabetisk rækkefølge
        });
        document.getElementById("liste").innerHTML = arr; // Skriver rækkefølgen
    }
</script>

2 个答案:

答案 0 :(得分:2)

如果我理解你是正确的,你想创建一个多维数组,然后按字母顺序和字符数对名称进行排序。如果这是正确的,我建议你用所需的数据创建一个多维对象。然后,您将能够对名称键进行排序并正确保留其他信息。

检查一下,它可能会让你朝着正确的方向前进

var arr = [
    {
    name: 'Nielsen',
    num: 1,
    count: 100
  },
  {
    name: 'Jensenlongest',
    num: 15,
    count: 230
  },
  {
    name: 'Jensenlong',
    num: 13,
    count: 500
  },
  {
    name: 'Jensen',
    num: 2,
    count: 300
  },
  {
    name: 'Hansen',
    num: 5,
    count: 400
  }
]

// Just adds the unsorted arr to the list for demo purpose
updateList(arr)

// On "Sort by length" button click
document.getElementById('sort-by-length').addEventListener('click', function (event) {
    arr.sort(sortNameByLength);
  updateList(arr);
})

// On "Sort alphabetically" button click
document.getElementById('sort-alphabetically').addEventListener('click', function (event) {
    arr.sort(sortNameAlphabetically);
  updateList(arr);
})

// Sort by name alphabetically
function sortNameAlphabetically(a, b) {
    return a.name > b.name
}

// Sort by name length
function sortNameByLength(a, b) {
    return a.name.length - b.name.length
}

// Updates the list according to the current sorting of the arr
function updateList(names) {
  var listHtml = ''

  names.forEach(function (item, index) {
    listHtml += item.name + ', ' + item.num + ' (' + item.count + ')<br>'
  })

  document.getElementById("liste").innerHTML = listHtml
}

https://jsfiddle.net/sbe8yzv0/4/

这将产生这样的列表。

Hansen, 5 (400)
Jensen, 2 (300)
Jensenlong, 13 (500)
Jensenlongest, 15 (230)
Nielsen, 1 (100)

答案 1 :(得分:0)

您可以使用具有您喜欢的数据结构的复杂对象数组(只需保持一致)。然后定义您自己的sort()方法,该方法仅比较对象的name参数。这是一个简单的例子:

var arr = [];
arr[0] = {ID: 1, Name: "Nielsen", Value: "100"};
arr[0] = {ID: 2, Name: "Jensen", Value: "200"};
// Sort based on the second column, 'Name'.
function sortByName(){
    arr.sort(
        function(x, y){
            return x.Name > y.Name; // Compare and sort based on the 'Name' column only.
        }
    );
    console.log(arr[0]);    // If results are correct this is 'Jensen'.
    console.log(arr[1]);    // If results are correct this is 'Nielsen'.
}   

根据您的需要进行调整(添加适当的列和数据,添加适当的变量,使其显示在页面的HTML中),它将完成您想要的操作。