[英]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;
}
}
订单应该是:
所有这些项目可能并不总是在数组中。 它可能只是苹果和香蕉,但它们仍然需要相同的排序位置。
我必须在创建数组后设置此手动排序顺序,因为我们的系统以随机顺序打印出来,然后我们需要正确排序。
最后,我需要将正确排序的水果放回到数组中。
想法?
将您的订单放在一个对象中,如下所示:
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.