【问题标题】:How can I reverse the "includes()" method to "not-includes()" and retrieve the not included value?如何将“includes()”方法反转为“not-includes()”并检索未包含的值?
【发布时间】:2019-12-16 15:44:58
【问题描述】:

我正在尝试使用以下代码在第二个数组中检索 未包含的值

function diffArray(arr1, arr2) {
  var newArr = [];
  for (let i of arr1) {
    if (arr2.includes(i)) {
      newArr.push(i)
    }
  }
  return newArr
}

console.log(
  diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5])
)

有什么方法可以使用另一种方法来做到这一点。我试过 indexOf 但我不想要索引。

谢谢

【问题讨论】:

  • 使用 ! 。这意味着not

标签: javascript methods include


【解决方案1】:

你可以使用filter():

let arr1 = [1, 2, 3, 5];
let arr2 = [1, 2, 3, 4, 5];

let result = arr2.filter(a2 => !arr1.includes(a2));
console.log(result);

【讨论】:

  • 不需要every - includes 仍然有效arr1.filter(item => !arr2.includes(item))
【解决方案2】:
if (!arr2.includes(i)) {
     newArr.push(i)
   } 

!意思是不

您也可以始终使用else,但它的代码行数更多:

if (arr2.includes(i)) {
     // newArr.push(i)
 }  else {
    newArr.push(i);
}

【讨论】:

  • 好吧,arr1 中的所有内容都在 arr2 中,所以你什么也得不到
  • 对,需要换个方向!
【解决方案3】:
const a1 = [1, 2, 3, 4, 5];
const a2 = [1, 2, 3, 5];

function diffArray(arr1, arr2) {
  const frequencies = arr1.concat(arr2).reduce((frequencies, number) => {
    const frequency = frequencies[number];
    frequencies[number] = frequency ? frequency + 1 : 1;
    return frequencies;
  }, {});

  return Object.keys(frequencies).filter(number => frequencies[number] === 1);
}

【讨论】:

  • 这对我来说太复杂了...但是感谢您的努力!
  • 您正在寻找仅出现在其中一个数组中的数字。我合并了两个数组并创建了一个对象,其中键是数字,值是它们在合并数组中出现的次数。然后删除出现超过 1 次的那些。我不想使用包含,因为它每次都会遍历数组,直到找不到您要查找的内容。
猜你喜欢
  • 1970-01-01
  • 2017-05-16
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多