当键为字符串时如何比较两个数组 - JavaScript


当键为字符串时,在 JavaScript 中比较两个数组可能会比较棘手。字符串比较区分大小写,需要特殊处理才能确保正确的结果。

幸运的是,在 JavaScript 中,当键为字符串时,您可以使用几种方法来比较两个数组。在本文中,我们将讨论如何使用各种方法(例如 *map()、include()、intersection() 和 Array.filter()*)有效地比较键为字符串的两个数组。

JavaScript 中的 *字符串* 用于存储和修改文本。JavaScript 中的 *字符串* 定义为用引号括起来的零个或多个字符。可以表示为文本的数据可以存储在字符串中。使用 *String()* 构造函数,可以将字符串创建为基本类型、从字符串文字或作为对象。

在 JavaScript 中使用 map()

*Map()* 是 JavaScript 的内置方法,它创建一个新数组,其中包含在数组的每个元素上调用提供的函数的结果。它可以用于迭代数组、修改每个项目并将修改后的项目作为新数组返回。对于空项目,*map()* 不会运行该函数。*map()* 不会影响初始数组。

语法

以下是 *map()* 的语法

array.map(function(currentValue, index, arr), thisValue)

JavaScript 中的 include()

在 JavaScript 中,*include()* 方法用于确定 *字符串* 是否包含另一个子字符串。结果以 true 或 false 返回。

语法

以下是 *include()* 的语法

string.includes(searchvalue, start)

示例

在下面的示例中,我们正在运行一个脚本,以使用 *map()* 和 *include()* 来比较两个数组。

<!DOCTYPE html>
<html>
<body>
   <script>
      const arr1 = [
         { "car": "Bmw"},
         { "car": "BENZ"},
         { "car": "Audi"},
         { "car": "Jaguar"}
      ];
      const arr2 = [
         { "car": "Audi"},
         { "car": "City"},
         { "car": "Jaguar"},
         { "car": "Verna" }
      ];
      const extractValue = ({ 'car': car }) => car;
      const duplicateValues = arr1
      .map(extractValue)
      .filter(x => arr2
         .map(extractValue)
         .includes(x)
      );
      document.write(JSON.stringify(duplicateValues));
   </script>
</body>
</html>

当脚本执行时,它将生成一个输出,其中包含在 Web 浏览器上打印的 *数组*。这是由一个触发的事件引起的,该事件使这两个 *数组* 互相比较并提供新的 *数组*。

示例

考虑以下示例,我们在此处使用 *intersection*;在这种情况下,它首先查找最长的 *数组* 并进行过滤,因此 *最短的数组* 用作要搜索的 *数组*。

<!DOCTYPE html>
<html>
<body>
   <script>
      const first = [
         { "bike": "Rx100"},
         { "bike": "R15"},
         { "bike": "Revolt"},
         { "bike": "Duke"}
      ]
      const second = [
         { "bike": "Deluxe"},
         { "bike": "Rx100"},
         { "bike": "Splendor"}
      ]
      const intersection = (longer, shorter, key) => {
         let tmp;
         if (shorter.length > longer.length) {
            tmp = shorter, shorter = longer, longer = tmp;
         }
         const vals = shorter.map(entry => entry[key]);
         return longer.filter(entry => vals.find(v => v ===entry[key]));
      }
      const key = 'bike';
      const third = intersection(first, second, key);
      document.write(JSON.stringify(third.flatMap(Object.values)));
   </script>
</body>
</html>

运行上述脚本后,输出窗口将弹出,在 Web 浏览器上显示 *数组*,这是由于运行脚本时触发的事件引起的。

示例

让我们看下面的例子,我们使用 *Array.filter* 遍历第一个数组并返回在第二个数组中找到的值。

<!DOCTYPE html>
<html>
<body>
   <script>
      const array1 = [
         { "movie": "Balu"},
         { "movie": "Gabbar"},
         { "movie": "Bheem"},
      ];
      const array2 = [
         { "movie": "Jalsa"},
         { "movie": "Balu"},
      ];
      const array2String = JSON.stringify(array2);
      const duplicates = array1.filter(x =>array2String.includes(JSON.stringify(x)));
      document.write(JSON.stringify(duplicates))
   </script>
</body>
</html>

当脚本执行时,事件被触发,该事件比较脚本中使用的两个数组,并在 Web 浏览器上返回这两个数组之间找到的值。

更新于:2023年1月18日

浏览量 1K+

启动您的 职业生涯

完成课程获得认证

开始学习
广告