Javascript:循环遍历包含对象的嵌套数组

时间:2018-04-26 13:09:55

标签: javascript arrays

我有一个包含我要比较的对象的拖曳数组,以便从对象中找到不匹配的值,如果包含不匹配的值,则返回该对象但是我很困惑我错了任何帮助或想法它的错误#s; s我的代码



var firstarry=[{'name':'alex','age':22,'numbersOne':['111','222','333','444','555'],'location':'iq'},{'name':'jan','age':33,'numbersOne':['111','222','333','444'],'location':'in'}];
var secondarray=[{'name':'aga','age':12,'numbersTwo':['111','222','333','444'],'location':'usa'},{'name':'jan','age':35,'numbersTwo':['111','222','333','444'],'location':'uk'}];
var un_mached_rows=[]; 
var tmp_recorder={};
firstarry.forEach(function(firstArrayElements){

  if(firstArrayElements.hasOwnProperty('numbersOne')){
    firstArrayElements.numbersOne.forEach(function(numberOneElements){
      secondarray.forEach(function(secondArrayElements){

        if(secondArrayElements.hasOwnProperty('numbersTwo')){
          secondArrayElements.numbersTwo.forEach(function(numbersTwoElements){

            if(numberOneElements!=numbersTwoElements){
              tmp_recorder.name = firstArrayElements.name;
              tmp_recorder.age = firstArrayElements.age;
              tmp_recorder.location = firstArrayElements.location;
              tmp_recorder.numbers = numberOneElements;
              un_mached_rows.push(tmp_recorder);
              tmp_recorder;                  
            }
          });
        }
      });
    });
  }
});
console.log(un_mached_rows);




它应该返回un_mached_rows=[{'name':'alex','age':22,'numbers':'555'}] 但现在它返回56错误记录

1 个答案:

答案 0 :(得分:0)

你的日常生活中有一个非常大的逻辑错误。

你基本上是把第一个数组的每个元素与第二个数组的每个元素进行比较....即使第一个数组与第一个数组中的1个元素相匹配,它也不会与其他元素相匹配,所以你得到了所有其他元素数组2的元素添加到您的结果... IE:

array1 = 1,2 array2 = 1,2,3

array1的第一个外循环值是1 ....

第一次循环通过array2内部循环array2元素是1所以1 = 1并且它们匹配....所以没有任何东西被添加到你的结果中,但是在内环1的循环2和3上将不匹配2或3,所以它们都被添加到结果数组......

然后外部循环值变为2,您将获得相同的行为。