簡體   English   中英

用JavaScript排序多個對象

[英]Sorting multiple objects in JavaScript

如何對包含數字和其他信息的對象進行排序?

我有2個物件。 點贊也與信息對象鏈接。 Likesobject包含隨機數,而視圖名稱將與Likesobject相關。 接下來的事情是,如果有新名稱傳入,則會越來越多地添加viewname。因此,它不會只是停留在d:link d

var viewnames = {
  'a': 'link a',
  'b': 'link b',
  'c': 'link c',
  'd': 'link d'
};

var Likeobject = {
  'a': 6,
  'b': 1,
  'c': 9,
  'd': 8
};

例,

name1 -> 2 likes
name2 -> 5 likes
name3 -> 10 likes
name4 -> 8 likes
name5 -> 12 likes`

從最高到最低排序之后,

name5 -> 12 likes
name3 -> 10 likes
name4 -> 8 likes
name2 -> 5 likes
name1 -> 2 likes
var obj1 = [{numLikes: likesobject},{viewerName: viewnames}];

我不確定我編寫對象的方式是否正確。 如果我錯了,請糾正我。 希望能解決我的問題。

使用array.sort

var myArray = [
    {"numLikes": 2, "viewerName": "name1"},
    {"numLikes": 5, "viewerName": "name2"},
    {"numLikes": 10, "viewerName": "name3"},
    {"numLikes": 8, "viewerName": "name4"},
    {"numLikes": 12, "viewerName": "name5"}
];
printArray();
sortArray();
printArray();
myArray.push({"numLikes" : 17, "viewerName" : "name6"}); // add another object to the array
myArray.push({"numLikes" : 1, "viewerName" : "name7"}); // add another object to the array
printArray();
sortArray();
printArray();
changeNumLikes("name1", 7);
printArray();
sortArray();
printArray();

function sortArray() {
    myArray.sort(function(a, b){
        return a.numLikes-b.numLikes;
    });
}

function printArray() {
    for (let i = 0; i < myArray.length; i++) {
        document.write("<span>" + myArray[i].viewerName + " : " + myArray[i].numLikes + "</span><br/>");
    }
    document.write("<br/>");
}

function changeNumLikes(viewerName, numLikes) {
    let object;
    for (let i = 0; i < myArray.length; i++) {
        if (myArray[i].viewerName === viewerName) {
            object = myArray[i];
            break;
        }
    }
    if (object && object.numLikes) {
        object.numLikes = numLikes;
    }
}

如何對包含數字和其他信息的對象進行排序?

您不對對象進行排序。

為什么,因為對象是屬性的無序集合

我猜您想按對象屬性對對象數組進行排序,因此請參見https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Array/sort ,可以為其提供比較功能。

實物示例將很有用。

您可以在數組中獲得要排序的鍵,按喜歡的降序進行排序,並使用keys數組生成已排序結果的列表。

此解決方案使用Array#sort

 var viewNames = { a: 'link a', b: 'link b', c: 'link c', d: 'link d' }, likes = { a: 6, b: 1, c: 9, d: 8 }, keys = Object .keys(likes) .sort((a, b) => likes[b] - likes[a]); keys.forEach(key => console.log(key, viewNames[key], likes[key])); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM