问题
我想测试数组内是否存在数组。例如,如果我的数组是这样的:
let arr = ["all", ['>', 'PSF', 10]]
我想要这样的事情发挥作用:
let segment = ['>', 'PSF', 10]
arr.indexOf(segment) // would be equal to 1, in this case
实际发生的事情
arr.indexOf(segment)目前是-1,因为我相信JavaScript [] != []
,因为它检查数组内存的位置。
无论如何,建议的测试方法是什么,以查看阵列中是否存在特定阵列?我也试过.includes(),但它似乎与indexOf的工作方式相同(所以它失败了)。
任何帮助都将不胜感激。
答案 0 :(得分:3)
首先需要创建一个比较2个数组的函数(实现将取决于您的需求),例如:
const compareArrays = (a1, a2) => Array.isArray(a1) && Array.isArray(a2) && a1.length === a2.length && a1.every((v, i) => v === a2[i])
您需要定义此函数,因为您的数组segment
可能更复杂,(即包含其他数组)
然后使用some
检查原始数组是否包含数组(segment
):
arr.some(element => compareArrays(segment, element) )
或findIndex
,以获取匹配数组的索引(如果不存在匹配的数组,则为-1)
arr.findIndex(element => compareArrays(segment, element) )