【发布时间】:2020-04-09 00:21:47
【问题描述】:
这可能是一个简单的问题,但我已经坚持了一段时间以使其变得简单。
我有两个数组,一个是选项卡,另一个是存储库。
我正在尝试根据存储库列表对选项卡数组进行排序。如果存储库名称与选项卡匹配,则应首先排序(基于原始数组),不匹配的选项卡名称应最后排序(根据原始数组)。
但是,我在下面尝试了,无法根据上述条件进行排序。
有人可以帮忙吗?
我希望该解决方案可以在 angular 8 中使用。
var tabs = ["Primary", "302-15", "152-88", "MEVCP"];
// Imagine it's a tab names
var repositories = [
{
"repositoryGuid": "",
"name": "Git Test 4",
"description": "Git Description",
"provider": "",
"url": "",
"modified": "2019-11-18T02:39:17.333",
"modifiedBy": ""
},
{
"repositoryGuid": "123",
"name": "Primary",
"description": "ITP Primary SQL Database",
"provider": "",
"url": "",
"modified": "2019-06-06T00:00:00",
"modifiedBy": ""
},
{
"repositoryGuid": "456",
"name": "MEVCP",
"description": "GIT test repository",
"provider": "",
"url": "",
"modified": "2019-09-30T16:01:47.17",
"modifiedBy": ""
},
{
"repositoryGuid": "679",
"name": "GIT Test",
"description": "GIT test repository",
"provider": "",
"url": "",
"modified": "2019-11-15T21:26:22.27",
"modifiedBy": ""
},
{
"repositoryGuid": "591",
"name": "ME-Cored-Convergence",
"description": "ME-Core-Convergence",
"provider": "",
"url": "",
"modified": "2019-09-30T15:38:46",
"modifiedBy": ""
}
];
const intersection = repositories.filter(element => tabs.includes(element.name));
console.log(intersection); // Getting matched values from tabs array
tabs.sort(function (a, b) {
return intersection.indexOf(a.name) - intersection.indexOf(b.name);
});
console.log("after sorting", tabs);
预期的输出应该是
["Primary", "MEVCP", "302-15", "152-88"]
PS:所有其他不匹配的值应与原始数组在同一级别排序。
【问题讨论】:
-
"我希望该解决方案可以在 angular 8 中使用。" 这是一个纯 JS 问题,还是我遗漏了什么?
-
可以像es6一样简单
标签: javascript angular sorting ecmascript-6 filter