【问题标题】:find an array in another array in javascript [duplicate]在javascript中的另一个数组中找到一个数组[重复]
【发布时间】:2019-01-25 10:30:40
【问题描述】:

JS中是否有任何函数可以检查“如果一个数组存在于一个更大的数组中?” 我试过array.includes()array.indexOf() 但它们对我不起作用...... 例如我这里除了一个真正的返回值:

parent = [[a,b],[c,d],[e,f]]
child = [c,d]

【问题讨论】:

  • 了解您尝试的方法为何不起作用的关键在于了解parent[1] child 相同。它们是两个独立的对象,碰巧都是数组,并且碰巧有相同的孩子。但是 JS 不知道这一点。因此,您需要添加逻辑,将父母的[c, d] 与孩子的[c, d] 进行比较,并确定就您而言它们是相同的。
  • 将此标记为欺骗,因为它本质上是:“我想做parent[1] == child,怎么做?” parent 也是一个数组这一事实与问题无关。
  • @ChrisG 正如您所建议的,问题不在于比较。它关于为什么包含失败。所以,我想这不是骗子。但是,我会将其添加到我的答案中作为参考
  • @Rajesh includes() 是基于比较,因此 OP 隐含地假设 parent[1] == child 应该评估为 true。副本解释了为什么不是这种情况并显示了解决方案。换句话说,这是一个完美的骗局。

标签: javascript arrays multidimensional-array


【解决方案1】:

让我们关注为什么.includes会失败。

Array.includes 使用以下函数来检查相等性:

function sameValueZero(x, y) {
  return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}

由于您将数组作为元素,它们是使用引用复制的,因此您正在检查数组的引用。因此它失败了。

以下是一个示例:

const item1 = ['a', 'b'];
const item2 = ['c', 'd'];
const item3 = ['e', 'f']

const parent = [item1, item2, item3]
const child = item3;

console.log(parent.includes(child))

因此,您必须更深入地检查各个值。

参考资料:

【讨论】:

    【解决方案2】:

    您的includes 失败,因为您正在尝试匹配参考。您可以在此答案https://stackoverflow.com/a/54363784/9624435

    上看到非常详细的解释

    您可以使用filterevery

    let parent = [['a','b'],['c','d'],['e','f']];
    let child = ['c','d'];
    
    let result = parent.filter(arr => arr.every(v => child.includes(v)));
    
    console.log(result);

    【讨论】:

    • IMO 对此问题的任何回答都必须说明为什么 includes() 会失败。这是一个重要的问题,理解为什么必须这样解决问题。编辑:我对此投了反对票,因为即使孩子有其他元素,它也会将两者视为相同。
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2013-04-20
    • 2019-12-24
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多