说我有两个对象数组。喜欢
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
循环来实现这一点。谢谢。
答案 0 :(得分:2)
来自
我尝试使用
forEach
。但这不起作用,并且当它们是不同长度的数组时会产生问题。
我收集到您想比较两个数组,而不考虑其长度。因此,您可以使用Math.max
从2个数组中获得最大长度。然后,遍历并检查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")
}
答案 1 :(得分:1)
您可以尝试以下代码:
var arr = [
{ name : 'john' },
{ name : 'doe' }
]
var arr2 = [
{ name : 'john' },
{ name : 'peter' },
{ name : 'doe' }
]
var i = 0, length = Math.min(arr.length, arr2.length);
for(i; i < length; i++) {
if(arr[i].name === arr2[i].name) {
console.log('good')
} else {
console.log('bad');
}
}
答案 2 :(得分:0)
您不必有2个循环。您可以执行以下操作:将数组映射到一个对象,对两个数组都具有以下结构:
// first array
{
"jhon": 1, //count how many names u have in each array
"otherName": 1
}
// second array
{
"jhon": 1, //count how many names u have in each array
"otherName": 1
}
,然后只比较这两个数组。更快更干净的imo。
答案 3 :(得分:0)
另一种使用“地图”功能的解决方案,以避免使用嵌套循环。不确定是否能回答整个问题,但希望能对您有所帮助。
//var search_value = 'john'; // will print 'good'
var search_value = 'doe'; // will print 'bad'
var name1 = [
{ name : 'john' },
{ name : 'doe' }
];
var name2 = [
{ name : 'john' },
{ name : 'does' }
];
var pos1 = name1.map(function(element) { return element.name; }).indexOf(search_value);
var pos2 = name2.map(function(element) { return element.name; }).indexOf(search_value);
var result = (pos1 == pos2) ? 'good' : 'bad';
console.log(result)