javascript - 给定两个相同长度的数组,找到哪些元素是 "shifted"

标签 javascript arrays underscore.js lodash

首先,这里有一些例子。

['d', 'b', 'c', 'd', 'e']
['c', 'd', 'e', 1, 2]
// desired result: [1, 2]

[1, 2, 3]
[2, 3, 4]
// desired result: [4]

['Hello', 'Goodbye', 'Goodbye', 'Hello']
['Goodbye', 'Hello', 'Goodbye', 'Goodbye']
// desired result: ['Goodbye', 'Goodbye']

元素移动了 n 个索引(其中 n 小于两个数组的长度)。数组的长度始终相同。它们总是从数组的右侧移开。有办法做到这一点吗?

我正在考虑在两个数组中找到最大的子集,然后取右或其他东西。找不到处理它的好方法

最佳答案

逻辑有点简单,主要问题是比较两个数组。

我正在使用 JSON.stringify 来执行此操作,但也可以循环遍历数组。

首先,你循环进入 arr a 并移动它,直到它具有与 b 的第一项相同的元素。

然后,你得到 arr b 并从 arr a 的长度中切片。

function findCrazyShifts(a, b) {
  while (JSON.stringify(a) !== JSON.stringify(b.slice(0, a.length))) {
    a.shift();
  }

  return b.slice(a.length);
}

console.log(findCrazyShifts(['d', 'b', 'c', 'd', 'e'], ['c', 'd', 'e', 1, 2]));
// result: [1, 2]

console.log(findCrazyShifts([1, 2, 3], [2, 3, 4]));
// result: [4]

console.log(findCrazyShifts(['Hello', 'Goodbye', 'Goodbye', 'Hello'], ['Goodbye', 'Hello', 'Goodbye', 'Goodbye']));
// result: ['Goodbye', 'Goodbye']

关于javascript - 给定两个相同长度的数组,找到哪些元素是 "shifted",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32914513/

相关文章:

javascript - 如何制作一个像这样随着页面滚动超过某个点的导航栏?

c++ - 像时尚一样在网格中格式化 C++ 中的输入

javascript - 如何基于这个简单对象构建这个复杂的数组

javascript - 条件 ng-repeat

javascript - Vue 中未调用计算属性集

javascript - jQuery 删除 dom 元素未按预期工作

java - 我无法阻止 null 显示在 java 中的一维数组的输出中

javascript - 将 Backbone.js 集合呈现为选择列表

javascript - 通过属性查找一个数组中不存在于另一个数组中的对象

javascript - 如何使用 javascript 通过 id 更改元素中的 -webkit-transform 、 -moz-transform 、 -o-transform 和 -ms-transform css?