javascript - 在不使用数组方法的情况下避免嵌套 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
只使用循环来实现这一点。谢谢。
解决方案
从
我尝试使用
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")
}
推荐阅读
- html - 如何防止导航滑入下一行?
- php - 为什么elquent的速度低于db query builder?
- javascript - 是否可以在 miragejs 上使用逻辑运算符?
- python - python - 如何使用递归在使用python的列表中给出最小整数?
- html - 汉堡菜单不关闭(引导程序)
- matlab - Matlab中某个分布的误差条
- precision - 数值乘法和除法中的GFortran双精度损坏?
- perl - 高效的 Perl 时区转换
- python - 如何在python中交换两个运算符?
- scala - Dataset.as() 的隐式 Encoder 参数是如何定义的