【问题标题】:How to simply find matching values in [[], [], []] arrays in javascript如何在javascript中的[[],[],[]]数组中简单地查找匹配值
【发布时间】:2021-06-01 09:02:16
【问题描述】:

JavaScript 新手。我有这两个数组

var array1 = [['1'],['2']];
var array2 = [['2'],['3'],['4']];

如何找到匹配的值?

在下面尝试但返回空数组可能是因为它用于普通数组结构 ['', '', '']

var matchingValue = array1.filter(value => array2.includes(value));
Logger.log(matchingValue);

匹配值应该是['2']

【问题讨论】:

  • 这里的the matching values 是什么?让我知道match的条件。
  • 嘿@hong4rc 应该是2
  • 请添加更多信息:数组是否只包含一个值?如果更多会发生什么?

标签: javascript arrays


【解决方案1】:

您可以简单地使用.flat() 来展平数组,这样您就可以只处理这样的值:-

var array1 = [['1'],['2']];
var array2 = [['2'],['3'],['4']];

var matchingValue = array1.flat().filter((value) => array2.flat().includes(value) )
console.log(matchingValue);

【讨论】:

  • 太棒了。我以前从来不知道公寓!感谢您的回答并向我介绍平面。感谢您的帮助!
【解决方案2】:

首先,让我们有一个判断两个数组是否相等的函数:

let equal = (a, b) => a.length === b.length && a.every((_, i) => a[i] === b[i])

然后,使用这个函数找到两个数组的交集:

var array1 = [['1'],['2']];
var array2 = [['2'],['3'],['4']];

let equal = (a, b) => a.length === b.length && a.every((_, i) => a[i] === b[i])

result = array1.filter(x => array2.some(y => equal(x, y)))

console.log(result)

以更通用的方式,您可以编写 intersectBy 来使用谓词回调计算交集:

let intersectBy = (a, b, predicate) => 
   a.filter(x => b.some(y => predicate(x, y)))   

【讨论】:

    【解决方案3】:

    Array.includes 按标识进行比较,因此它适用于基元,而不适用于数组和对象。

    这是一个比较内部数组的第一个元素的解决方案:

    var matchingValue = array1.filter(value1 => {
      return array2.map(value2 => value2[0]).includes(value1[0]);
    });
    

    Array.map 用于将 Array of Arrays 转换为 Array of strings,然后 Array.includes 用于匹配第一个 Array 的第一个元素。

    这仅适用于当前结构(一个元素数组的数组)。

    【讨论】:

      【解决方案4】:

      const array1 = [['1'],['2']];
      const array2 = [['2'],['3'],['4']];
      
      const array1Flat = [].concat(...array1);
      const array2Flat = [].concat(...array2);
      
      const matchingValue = array1Flat.filter((value) => array2Flat.includes(value));
      
      console.log(matchingValue);

      你不需要使用.flat(),你可以简单地使用 concat 和 spread 来展平数组。

      【讨论】:

      • aa 是有道理的。 concat 也很好用。谢谢:)
      猜你喜欢
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多