javascript - 查找数组中交换的值

标签 javascript arrays difference

假设给定 2 个包含相同值的数组,并且已知一次只能交换 2 个值。

originalArray = [ "i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs" ]
sortedArray =   [ "vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs" ]

第一个数组是原始数组,后排序版本。

如您所见,前两个值在后一个版本中已交换。

如何检测并返回已更改的值,例如:(或者如果您有更好的想法,请继续!)

[
 {
   "changedWhat": "vnc1ar7f",
   "oldPosition": 1,
   "newPosition": 0
 }
 {
    "changedWhat": "i0w66c25",
    "oldPosition": 0,
    "newPosition": 1
 }
]

最佳答案

假设两个数组长度相同、不包含重复值并且具有相同的项目

var originalArray = ["i0w66c25", "vnc1ar7f", "ajo3u8xl", "i13kn0bs"];
var sortedArray = ["vnc1ar7f", "i0w66c25", "ajo3u8xl", "i13kn0bs"];

var changedItems =
  originalArray

    .filter(function(item, index) {
      return item != sortedArray[index]
    })

    .map(function(item) {
      return {
        "changedWhat": item,
        "oldPosition": originalArray.indexOf(item),
        "newPosition": sortedArray.indexOf(item)
      };
    });

console.log(changedItems);

首先,我们使用filter()以确定哪些项目确实不合适。

然后,我们map()这些项目到自定义对象数组。

关于javascript - 查找数组中交换的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307913/

相关文章:

javascript - 如何更新附加值?

android - Activity 和 fragment 之间有什么区别?

javascript - d3.js 如何获取对象数组数据的总和?

arrays - 在 O(n) 时间和 O(1) 空间中找到排序数组 A[1..n] 中的两个整数,使得 a = 3b - 7

c - 从表中删除元素(c 程序)

两个日期之间的Android差异

matlab symfun 与匿名函数

javascript - 如何将对象数组中的 "expand"子数组

javascript - Html2canvas: facebook 插件评论

javascript - 对于 jQuery(不是 jQuery UI!)来说,这是一个多么好的日期+时间选择器?