2013-04-25 139 views
2

我有javascriptarray,我需要按預先定義的順序排序。這似乎是隨機的,但他們確實需要按照特定的順序。按預先定義的順序對javascript數組進行排序

這裏是我開始,但我不知道如何完成:

// 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

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

我在創建陣列後,因爲我們的系統打印出來在這個隨機的順序,我們則需要正確排序,設置本手冊排序順序。

最後,我需要在數組中正確排序的水果。

想法?

+0

你怎麼希望他們排序?你能告訴我們哪個訂單? – Niels 2013-04-25 17:39:27

+0

它是根據「訂購我想要它們」的部分。 – 2013-04-25 17:39:52

+0

你想在位置'0'處做什麼?爲什麼使用對象而不是數組? – 2013-04-25 17:40:24

回答

6

嘗試:

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); 

DEMO:http://jsfiddle.net/JPNGS/

順序在theOrder定義。 items包含可用項目。 itemsOrdered包含可用的項目,已訂購。

+0

輝煌!這正是我一直在尋找和完美的作品!謝謝! – 2013-04-25 17:56:33

+0

不知道這個尺度如何......如果'theOrder'有100或1000個元素,'items'只有10個呢? – BaltoStar 2014-06-17 22:36:11

0

您的代碼可以簡化爲:

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

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

+0

在創建數組後,我必須設置此手動排序順序,因爲我們的系統會按照隨機順序打印出來,然後我們需要正確排序。 – 2013-04-25 17:44:57

3

把你的排序中的對象,像這樣:

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

然後使用排序Array.sort(compareFunction(a, b)),傳遞一個排序函數來檢查你的對象對orderingitems陣列(留作練習)。請查看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"] 
+0

您正在定義一個對象,而不是數組。 – 2013-04-25 17:45:18

+0

是的。我正在考慮更多的哈希。不過,一個普通的對象工作正常。編輯。 – iamnotmaynard 2013-04-25 17:51:25

0

首先你的對象轉換爲數組:

var sortOrder = []; 

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

然後用.filter()這樣的:

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