Javascript 将一个数组排序到尽可能靠近另一个数组的位置

Javascript 将一个数组排序到尽可能靠近另一个数组的位置,javascript,Javascript,如何对数组进行排序,使其尽可能接近目标数组 例如: 数组最多只能包含4个元素: ['javascript'、'html'、'css'、'result'] 但如果不是,则排序应如下所示: ['css','result','html'];排序为['html','css','result'] ['result','css','javascript'];排序为['javascript','css','result'] 标准是使其接近['javascript'、'html'、'css'、'结果'];如果某

如何对数组进行排序,使其尽可能接近目标数组

例如:

数组最多只能包含4个元素:

['javascript'、'html'、'css'、'result']

但如果不是,则排序应如下所示:

['css','result','html'];排序为['html','css','result']

['result','css','javascript'];排序为['javascript','css','result']

标准是使其接近['javascript'、'html'、'css'、'结果'];如果某个元素不存在,请尽可能跳过它

我当前的代码似乎做得不正确,我将其包括在下面:

函数setFiddleTabs数组更新FiddleTabs{ 如果updatedFiddleTabs.length==4{ updatedFiddleTabs=['javascript','html','css','result']; }否则{ const correctFiddleTabsOrder=['javascript','html','css','result']; 常量小提琴手=a,b=>{ 如果已更正,FiddleTabsorder.includesa{ 返回-1; } 如果已更正,则FiddleTabsorder.includesb{ 返回1; } 返回0; }; 更新的fiddletab.sortfiddletabsorter; 返回更新的FiddleTabs; } 返回更新的FiddleTabs; } const test1=setFiddleTabsArray['css','html','result'];
console.logtest1 你总是会得到1,因为它总是在数组中。您需要根据匹配的索引进行排序

函数setFiddleTabs数组更新FiddleTabs{ 如果updatedFiddleTabs.length==4{ updatedFiddleTabs=['javascript','html','css','result']; }否则{ const correctFiddleTabsOrder=['javascript','html','css','result']; 常量小提琴手=a,b=>{ 返回correctFiddleTabsOrder.indexOfa-correctFiddleTabsOrder.indexOfb; }; 更新的fiddletab.sortfiddletabsorter; 返回更新的FiddleTabs; } 返回更新的FiddleTabs; } const test1=setFiddleTabsArray['css','html','result'];
console.logtest1 另一种方法是将排序排序提取到单独的对象,并使用以下逻辑进行排序:

const sortRanking = {
  javascript: 0,
  html: 1,
  css: 2,
  result: 3,
};

const setFiddleTabsArray = (updatedFiddleTabs) =>
  updatedFiddleTabs.sort((a, b) => {
    if (sortRanking[a] > sortRanking[b]) return 1;
    if (sortRanking[a] < sortRanking[b]) return -1;
    return 0;
  });

const test1 = setFiddleTabsArray(["css", "html", "result"]);
console.log(test1);

这使得imo非常明确且易于理解

如果您始终确信数组中除了“javascript”、“html”、“css”、“result”之外没有任何内容,我将使用filter函数

函数setFiddleTabs数组更新FiddleTabs{ 如果updatedFiddleTabs.length==4{ 返回['javascript','html','css','result']; }否则{ const correctFiddleTabsOrder=['javascript','html','css','result']; 让结果=correctedFiddleTabsorder.filterelement=>updatedFiddleTabs.IncludeElement 返回结果; } } const test1=setFiddleTabsArray['css','html','result'];
console.logtest1;排序的确切标准是什么?从这些例子中很难理解。为什么在包含两次结果的数组的示例中,结果以html结尾?为什么不使用javascript?includes是错误的,您应该基于索引进行排序,或者我已经修复了它。标准是使其接近['javascript'、'html'、'css'、'结果'];如果某个元素不存在,请尽可能跳过它。谢谢,这样可以修复它。我真的很感激!