当键为字符串时如何比较两个数组 - 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 浏览器上返回这两个数组之间找到的值。