当前位置: 首页 > 知识库问答 >
问题:

排序一个数组尽可能接近另一个数组

安轶
2023-03-14

我如何排序一个数组尽可能接近一个目标数组。

例如:

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

['javascript','html','css','result'];

但在不是的情况下,排序应如下所示:

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

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

标准是使它尽可能接近['javascript','html','css','result'];,并且在不存在特定元素的地方,跳过它。

我当前的代码似乎做得不对,我把它包含在下面:

null

function setFiddleTabsArray(updatedFiddleTabs) {
  if (updatedFiddleTabs.length === 4) {
    updatedFiddleTabs = ['javascript', 'html', 'css', 'result'];
  } else {
    const correctFiddleTabsOrder = ['javascript', 'html', 'css', 'result'];
    const fiddleTabsSorter = (a, b) => {
      if (correctFiddleTabsOrder.includes(a)) {
        return -1;
      }
      if (correctFiddleTabsOrder.includes(b)) {
        return 1;
      }
      return 0;
    };
    updatedFiddleTabs.sort(fiddleTabsSorter);
    return updatedFiddleTabs;
  }
  return updatedFiddleTabs;
}

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

null

我怎么修好它?

共有2个答案

方心思
2023-03-14

另一种选择是将排序排名提取到一个单独的对象,并使用以下逻辑进行排序:

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

田翔
2023-03-14

你总是会得到1,因为它总是在数组中。您需要根据匹配项的索引进行排序

null

function setFiddleTabsArray(updatedFiddleTabs) {
  if (updatedFiddleTabs.length === 4) {
    updatedFiddleTabs = ['javascript', 'html', 'css', 'result'];
  } else {
    const correctFiddleTabsOrder = ['javascript', 'html', 'css', 'result'];
    const fiddleTabsSorter = (a, b) => {
      return correctFiddleTabsOrder.indexOf(a) - correctFiddleTabsOrder.indexOf(b);
    };
    updatedFiddleTabs.sort(fiddleTabsSorter);
    return updatedFiddleTabs;
  }
  return updatedFiddleTabs;
}

const test1 = setFiddleTabsArray(['css', 'html', 'result']);
console.log(test1);
 类似资料:
  • 问题内容: 我有一个数组和一个引用数组。的大小至少等于。例如 实际上是在指定时间信号中的峰值位置,并且包含稍后时间的峰值位置。但是某些元素实际上是不是我想要的峰(可能是由于噪声等),我想找到“真正的”一个基础。中的“真实”元素应与中的元素接近,在上面给出的示例中,中的“真实”元素应为。在这个例子中应该很明显不是我们想要的,因为它们与B中的任何元素都相去甚远。如何在python / matlab中以

  • 有没有更时髦的方法来解决这个问题?

  • 问题内容: 假设我有一个自定义类的数组,每个类都包含一个名为 我还有一个任意值数组,称为,如下所示: 我的目标是对所有QB 进行排序,然后再对所有WR,RB和TE 进行排序。 我当前的操作方式是遍历中的每个元素,然后遍历所有播放器以附加到新数组。但是,我想不出一种更简单(更有效)的方法来做到这一点。非常感谢任何提示或指示。谢谢。 问题答案: 编辑: 我原来的方法是狗屎。这篇文章吸引了很多人的注意力

  • 问题内容: 从这个问题的答案(使用一个较少的内存,沿着一个特定轴对另一个numpy数组进行排序)中,我学习了如何根据另一个numpy数组的值对多维numpy数组进行排序,而又不创建太多额外的数组。 但是,仅当数组和具有相同形状时才有效。我的数组是一维数组,但数组是ND数组(未指定N)。通过一维数组的值在特定轴上对数组进行排序是一种好方法(高效)吗? 问题答案: 使用与关键字参数: 如果要使用花式索

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组: