簡體   English   中英

按預定義的順序對javascript數組進行排序

[英]Sort javascript Array in a pre-defined order

我有一個javascript array ,我需要按預定義的順序排序。 它似乎是隨機的,但它們確實需要按特定順序排列。

這是我開始的地方,但不知道如何完成:

// Items
var items = ["Apples", "Oranges", "Grapes", "Peaches", "Bananas", "Watermelon"];
var itemsOrdered = {};

// Order how I want them
for (i in items) {
    var item = items[i];
    if (item == 'Apples') {
        itemsOrdered['4'] = item;
    } else if (item == 'Oranges') {
        itemsOrdered['2'] = item;
    } else if (item == 'Grapes') {
        itemsOrdered['1'] = item;
    } else if (item == 'Peaches') {
        itemsOrdered['3'] = item;
    } else if (item == 'Bananas') {
        itemsOrdered['6'] = item;
    } else if (item == 'Watermelon') {
        itemsOrdered['5'] = item;
    }
}

訂單應該是:

  • 蘋果:4
  • 橘子:2
  • 葡萄:1
  • 桃子:3
  • 香蕉:6
  • 西瓜:5

所有這些項目可能並不總是在數組中。 它可能只是蘋果和香蕉,但它們仍然需要相同的排序位置。

我必須在創建數組后設置此手動排序順序,因為我們的系統以隨機順序打印出來,然后我們需要正確排序。

最后,我需要將正確排序的水果放回到數組中。

想法?

將您的訂單放在一個對象中,如下所示:

var ordering = {};
ordering["Apples"] = 4;
ordering["Oranges"] = 2;
... // etc.

然后使用Array.sort(compareFunction(a, b))items數組進行排序,並向其傳遞一個排序函數以檢查對象是否違反ordering (左側作為練習)。 查看https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort ,了解如何使用compareFunction()

編輯:這是一個實現:

var ordering = {"Apples":4, "Oranges":2, "Grapes":1, 
                "Peaches":3, "Bananas":6, "Watermelons":5};
var items = ["Apples", "Oranges", "Grapes", 
             "Peaches", "Bananas", "Watermelons"];
items.sort(function(a,b) { return ordering[a] - ordering[b]; })
> ["Grapes", "Oranges", "Peaches", "Apples", "Watermelons", "Bananas"]

嘗試:

var items = ["Apples", "Bananas", "Watermelons"];
var itemsOrdered = [];
var theOrder = ["Grapes", "Oranges", "Peaches", "Apples", "Watermelons", "Bananas"];

for (var i = 0; i < theOrder.length; i++) {
    if (items.indexOf(theOrder[i]) > -1) {
        itemsOrdered.push(theOrder[i]);
    }
}

console.log(itemsOrdered);

演示: http //jsfiddle.net/JPNGS/

順序被定義theOrder items包含可用的項目。 itemsOrdered包含訂購的可用商品。

您的代碼簡化為:

var itemsOrdered = {1:"Peaches",2:"Oranges",3:"Grapes",4:"Apples",5:"Watermelon",6:"Bananas"};

換句話說,這完全沒有意義。 只需按照您想要的順序定義它們。

首先將對象轉換為數組:

var sortOrder = [];

for (i in itemsOrdered)
    sortOrder[i-1] = itemsOrdered[i];

然后像這樣使用.filter()

var result = sortOrder.filter(item) {
    return items.indexOf(item) !== -1;
});

暫無
暫無

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

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