【问题标题】:Find the first occurrence of element from array in another array从另一个数组中的数组中查找第一次出现的元素
【发布时间】:2020-09-18 08:33:17
【问题描述】:

我很好奇是否有一种好方法可以从另一个数组中的数组中找到第一次出现的元素。 结果,答案应该是 null(如果第二个数组中的第一个数组中没有元素)或这个元素。 例 1:

fromArr = ["Yellow", "Green", "Orange", "Apple", "Banana", "Apple"];
whereArr= ["Apple", "Orange", "Banana", "Apple"];

//答案应该是“橙色”,因为顺序很重要(首先我们检查“黄色”,然后检查“绿色”,然后检查“橙色” - 找到了!)。

例 2:

fromArr = ["Orange", "Apple", "Banana", "Apple"];
whereArr= ["November", "December", "April", "Banana"];

//答案应该是“香蕉”。

例 3:

fromArr = ["Orange", "Apple"];
whereArr= ["November", "December", "April"];

//答案应该为空。

谢谢

【问题讨论】:

  • 您需要null 还是如果找不到项目undefined 可以吗?
  • 我错过了什么吗? fromArr.forEach(item => console.log(whereArr.find(item2 => item === item2)))
  • 这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?否则,请考虑将最能解决您的问题的答案标记为已接受。

标签: javascript arrays find-occurrences


【解决方案1】:

您可以在您的fromArr 上使用.find(),并将您的whereArr 转换为Set 以实现高效(次线性)查找。 .find() 将遍历 fromArr 中的所有值,直到回调返回 true。一旦回调返回true.find() 将返回您当前迭代的值。您可以使用.has() 检查该集合是否具有该值,当值在该集合内时,它将返回true。如果 find 的回调没有为 fromArr 中的任何值返回 true,它将导致 undefined

请看下面的例子:

const fromArr = ["Yellow", "Green", "Orange", "Apple", "Banana", "Apple"];
const whereSet = new Set(["Apple", "Orange", "Banana", "Apple"]);

const result = fromArr.find(val => whereSet.has(val));
console.log(result);

【讨论】:

    【解决方案2】:

    您可以通过在“fromArr”数组上使用“find”轻松完成此操作,并比较“whereArr”数组中是否包含条目。

    例子:

    fromArr = ["Yellow", "Green", "Orange", "Apple", "Banana", "Apple"];
    whereArr = ["Apple", "Orange", "Banana", "Apple"];
    fromArr.find(e => whereArr.includes(e));
    

    【讨论】:

      【解决方案3】:

      您可以使用fromArr 的项目的索引号创建一个对象。然后检查whereArr 数组的每个元素,以及哪个项目具有最小的索引(来自哈希)值,这是第一次出现。此方法需要O(n+m) 时间。

      function getFirstOccurance(fromArr, whereArr) {
        const indics = fromArr.reduce((acc, curr, i) => ({...acc, [curr]: i}), {});
      
        let min = Number.MAX_SAFE_INTEGER;
        let res = null;
        whereArr.forEach(item => {
          if (indics[item] < min) {
            min = indics[item];
            res = item;
          }
        });
      
        return res;
      }
      
      let arr = ["Yellow", "Green", "Orange", "Apple", "Banana", "Apple"];
      let arr2= ["Apple", "Orange", "Banana", "Apple"];
      console.log(getFirstOccurance(arr, arr2));
      
      arr = ["Orange", "Apple", "Banana", "Apple"];
      arr2 = ["November", "December", "April", "Banana"];
      console.log(getFirstOccurance(arr, arr2));
      
      arr = ["Orange", "Apple"];
      arr2= ["November", "December", "April"];
      console.log(getFirstOccurance(arr, arr2));
      .as-console-wrapper{min-height: 100%; top: 0}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多