javascript - 从两个数组中返回唯一元素

标签 javascript arrays object merge greedy

我有两个数字数组,我想获取两个数组中出现的唯一数字。然后我还想返回两个数组中的唯一数字。

例如:

INPUT:
let arr1 = [1234,4056,3045]
let arr2 = [5678,1234,5001]

OUTPUT:
only in arr1: [4056, 3045] 
only in arr2: [5678, 5001] 
in both lists: [1234]

这是我的解决方案,它有效,但我想不出如何优化我的解决方案。只使用 JavaScript,没有像 loadash 这样的工具。有什么想法吗?:

const getUniqueNumbers = (arr1, arr2) => {
  let uniqueOfBoth = arr1.filter((ele) => {
    return arr2.indexOf(ele) !== -1
  })

  let uniqueOfList1 = arr1.filter((ele) => {
    return arr2.indexOf(ele) == -1
  })

  let uniqueOfList2 = arr2.filter((ele) => {
    return arr1.indexOf(ele) == -1
  })

  return `Unique numbers from both list are ${uniqueOfBoth} 
              Unique nums to List1 : ${uniqueOfList1}
              Unique nums to List2 : ${uniqueOfList2}
    `
}

let result = getUniqueNumbers([1234, 4056, 3045], [5678, 1234, 5001])
console.log(result)

最佳答案

我认为这种方法很好,只要它不会成为瓶颈。您正在执行三个 O(n**2) 操作来获取您的列表,因此如果有一种方法可以降低复杂性,那就太好了。

您可以尝试的一件事是使用哈希表来记录数字出现的次数。但是您需要有点聪明,因为您不能只数数,否则您将不知道 1 表示 arr1 还是 arr2。但是由于只有 4 种可能性,您只需要 2 位来表示它们。所以当它在 array1 中时你加 1,当它在 array1 中时你加 2。这意味着 1 在 arr1 中,2 在 arr2 中,而 3 在两者中。创建计数仅为 O(n+m),其中 n 和 m 是数组长度。 (但是,您仍然需要对其进行过滤以获得最终结果)

const getUniqueNumbers =(arr1,arr2) =>{
    let counter = {}
    arr1.forEach(i => counter[i] = counter[i] ? counter[i] + 1 : 1)
    arr2.forEach(i => counter[i] = counter[i] ? counter[i] + 2 : 2)
    
    return counter
}
let counts = getUniqueNumbers([1234,4056,3045],[5678,1234,5001])
console.log(counts)

然后这只是一个过滤你想要的东西的问题,比如:

let both = Object.keys(counter).filter(key => result[key] === 3)

关于javascript - 从两个数组中返回唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51389201/

相关文章:

javascript - 带手动输入的 Jquery 范围 slider

java - 如何反转 Int 数组?

javascript - 验证对象的值

java - Java 代码中 JRuby 对象的序列化

javascript - 如何使用 jQuery 更改 SVG 形状的颜色?

javascript 到 JSON 保存动态属性

javascript - 需要启用键盘的空格键

python - numpy - 对数组的每一行应用聚合

c# - 代码 : retrieve item from Array using FirstorDefault() 的解释

javascript - 如何在javascript中移动嵌套对象数组中的元素