10

我有一个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

所有这些项目可能并不总是在数组中。可能只有 Apples 和 Bananas,但它们仍然需要相同的排序位置。

我必须在创建数组后设置此手动排序顺序,因为我们的系统以这种随机顺序将它们打印出来,然后我们需要正确排序。

最后,我需要将正确排序的水果放回数组中。

想法?

4

4 回答 4

11

尝试:

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/

顺序在 中定义theOrderitems包含可用的项目。itemsOrdered包含可用项目,已订购。

于 2013-04-25T17:46:01.930 回答
10

将您的订单放入一个对象中,如下所示:

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

然后使用 对items数组进行排序Array.sort(compareFunction(a, b)),传递给它一个排序函数来检查你的对象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"]
于 2013-04-25T17:44:25.327 回答
0

首先将您的对象转换为数组:

var sortOrder = [];

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

然后.filter()像这样使用:

var result = sortOrder.filter(item) {
    return items.indexOf(item) !== -1;
});
于 2013-04-25T17:55:48.737 回答
-2

您的代码简化为:

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

换句话说,这完全没有意义。只需按照您想要的顺序定义它们。

于 2013-04-25T17:42:20.357 回答