根据另一个单词数组排序一个单词数组

Sti*_*ijn 5 javascript typescript

我有这样一个数组:

unorderedArr = ['pear', 'apple', 'banana', 'peach', 'pineapple'];
Run Code Online (Sandbox Code Playgroud)

我想基于另一个给定的数组来命令这个数组,如下所示:

order = ['peach', 'apple', 'pineapple']
Run Code Online (Sandbox Code Playgroud)

首选结果是:

orderedArr = ['peach', 'apple', 'pineapple', 'banana', 'pear'];
Run Code Online (Sandbox Code Playgroud)

在什么索引上放置不在order数组中的单词并不重要.不能保证order数组中的单词将在无序数组中

当前代码解决方案

我尝试使用这样的switch语句:

const orderedArr = []
unorderedArr.forEach(word => {
  switch (word) {
    case 'peach':
      orderedArr.push(word);
      break;

    case 'apple':
      orderedArr.push(word);
      break;

    case 'pineapple':
      orderedArr.push(word);
      break;

    default:
      orderedArr.push(word);
      break;
    }
});
Run Code Online (Sandbox Code Playgroud)

但我发现switch语句不会先检查第一个案例.

pid*_*pid 4

我认为没有一种简单的非编程方法可以做到这一点。您需要的是一种能够产生所需结果的算法,如下所示:

function partialOrder(preferences, data)
{
  var result, reminder;

  result = [];

  // find preferences and put them into result
  preferences.forEach((name) => {
    result = result.concat(
      data.filter((d) => d.name === name)
    );
  });

  // find remaining data not in preferences
  reminder = data.filter((item) =>
    preferences.indexOf(item.name) === -1
  );

  return result.concat(reminder);
}

var preferences = [ "peach", "pear", "pineapple", "<alien-fruit>" ];
var data = [
  { "name": "apple", "image_url": "xApple" },
  { "name": "pineapple", "image_url": "xPineapple" },
  { "name": "peach", "image_url": "xPeach" },
  { "name": "pear", "image_url": "xPear" },
  { "name": "banana", "image_url": "xBanana" }
];

console.log(partialOrder(preferences, data));
Run Code Online (Sandbox Code Playgroud)