我希望按特定顺序对三个字符串进行排序。
书,汽车和轮子。我可以按任何顺序接收这些字符串。 可能有一个或多个字符串 - 最多三个
如果收到一个或多个字符串,我想按照以下确切的顺序对字符串进行排序。
轮子,书,车假设属性名称是name ...
我试过这样的事情:
myitem.sort((a, b) => {
if(a.name === 'wheel')
return 1;
if(a.name === 'book' && b.name === 'car')
return 1;
return -1;
答案 0 :(得分:4)
您可以使用具有值及其顺序的顺序的对象。使用默认值,您可以将未指定的值移动到数组的开头或结尾。
var order = { wheel: 1, book: 2, car: 3, default: 1000 },
array = ['foo', 'car', 'book', 'wheel'];
array.sort(function (a, b) {
return (order[a] || order.default) - (order[b] || order.default);
});
console.log(array);
答案 1 :(得分:2)
由于您只期望这三个字符串中的实例(仅在myitem
中),您可以在有序数组上使用filter
,并使用Set#has
测试这些输入字符串是否存在:< / p>
var result = ['wheel', 'book', 'car'].filter(function (s) {
return this.has(s)
}, new Set(myitem));
// Sample data being received
var myitem = ['car', 'wheel'];
var result = ['wheel', 'book', 'car'].filter(function (s) {
return this.has(s)
}, new Set(myitem));
// ordered result
console.log(result);
&#13;
答案 2 :(得分:0)
您的代码看起来大多正确。我修改了格式等,并颠倒了sort函数中的符号。
当然,此仅处理具有这三个确切名称的项目。如果你需要处理其他输入,你必须决定应该发生什么。
var myitems = [
{
name: "book",
},
{
name: "wheel",
},
{
name: "car",
},
];
console.log(
myitems.sort((a, b) => {
if (a.name === "wheel") {
return -1;
}
if (a.name === "book" && b.name === "car") {
return -1;
}
return 1;
})
);