按预定义顺序对javascript数组排序

按预定义顺序对javascript数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个javascript数组,需要按预定义的顺序排序。这似乎是随机的,但它们确实需要有一个特定的顺序 以下是我开始的地方,但不确定如何结束: // Items var items = ["Apples", "Oranges", "Grapes", "Peaches", "Bananas", "Watermelon"]; var itemsOrdered = {}; // Order how I want them for (i in items) { var item = item

我有一个
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
所有这些项可能并不总是在数组中。可能只有苹果和香蕉,但它们仍然需要相同的排序位置。


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

最后,我需要将正确排序的水果返回到一个数组中


想法?

您的代码简化为:

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

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

将您的顺序放入对象中,如下所示:

var ordering = {};
ordering["Apples"] = 4;
ordering["Oranges"] = 2;
... // etc.
var result = sortOrder.filter(item) {
    return items.indexOf(item) !== -1;
});
然后使用
array.sort(compareFunction(a,b))
数组进行排序,并将排序函数传递给它,以根据
排序检查对象(左为练习)。查看如何使用
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=[“苹果”、“香蕉”、“西瓜”];
var itemsOrdered=[];
var Theorer=[“葡萄”、“橙子”、“桃子”、“苹果”、“西瓜”、“香蕉”];
对于(变量i=0;i-1){
项目排序。推(排序器[i]);
}
}
console.log(项排序);
演示:


顺序在
排序器中定义<代码>项目
包含可用项目
itemsOrdered
包含已排序的可用项。

首先将对象转换为数组:

var sortOrder = [];

for (i in itemsOrdered)
    sortOrder[i-1] = itemsOrdered[i];
然后像这样使用
.filter()

var ordering = {};
ordering["Apples"] = 4;
ordering["Oranges"] = 2;
... // etc.
var result = sortOrder.filter(item) {
    return items.indexOf(item) !== -1;
});

你想怎样分类?你能告诉我们是哪一个订单吗?它在“如何订购我想要的”部分。你想在位置
0
上做什么?为什么使用对象而不是数组?这种排序背后的逻辑是什么?你不能做一个“我想要那样”的算法。你被困在哪里了?我必须在创建数组后设置手动排序顺序,因为我们的系统以随机顺序打印出来,然后我们需要正确排序。你定义的是一个对象,而不是数组。对。我想的更多的是一份杂烩。不过,一个普通的物体很好用。已编辑。您现在可以使用地图而不是普通对象进行排序。太棒了!这正是我一直在寻找和完美的作品!非常感谢。不知道这个比例有多大。。。如果
theOrder
有100或1000个元素,而
项只有10个呢?