2013-04-25 134 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; 
}); 
相关问题