首页 > 解决方案 > 在不使用数组方法的情况下避免嵌套 for 循环

问题描述

假设我有两个对象数组。喜欢

var name = [
    { name : 'john' },
    { name : 'doe' }
]
var name2 = [
    { name : 'john' },
    { name : 'does' }
]

我想检查第一个数组中的名称是否与第二个数组中的名称相同并返回响应。我将在下面执行此操作

for(var i = 0; i < name.length; i++) {
    for(var j = 0; j < name2.length; j++) {
        if(name[i].name === name2[j].name) {
            console.log('good')
        } else {
            console.log('bad');
        }
    }
}

上面的代码将给出以下结果

good
bad 
bad
bad

如何在不使用嵌套 for 循环的情况下获得相同的结果?

我尝试使用forEach一次循环。喜欢

name.forEach(function(value, index) {
    if(value.name === name2[index].name) {
        console.log('good');
    }
    console.log('bad')
});

但这不起作用,并且当它们是不同长度的数组时会出现问题。

我所有的研究都导致使用filter, map, reduce... 方法。我想for只使用循环来实现这一点。谢谢。

标签: javascriptfor-loop

解决方案


我尝试使用forEach. 但这不起作用,并且当它们是不同长度的数组时会出现问题。

我收集您想比较两个数组,而不管长度如何。因此,您可以使用Math.max. 然后,遍历并检查 2 个数组在每个索引处是否具有相同的值

该条件name1[i] && name2[i]检查undefined较小数组何时在指定索引处没有值。

var name1 = [
    { name : 'john' },
    { name : 'doe' }
]
var name2 = [
    { name : 'john' },
    { name : 'does' },
    { name : 'jane' }
]

var maxLength = Math.max(name1.length, name2.length);

for (var i = 0; i < maxLength; i++) {
  if (name1[i] && name2[i] && name1[i].name === name2[i].name)
    console.log("good")
  else
    console.log("bad")
}


推荐阅读