如何在多维数组中查找重复值

how do find duplicate values in a multidimensional array

本文关键字:查找 数组      更新时间:2024-06-11

我在这里遇到麻烦了;我想从数组中收集所有重复的值。

修改示例:

Array [
  {
    first: array[ 24, 58],
    last:  array[ 25,     59   ]
  },
  {
    first: array[ 25, 59],
    last:  array[ 23,     57]
  },
  {
    first: array[ 25, 59],
    last:  array[ 26, 54]
  }, 
  {
    first: array[ 23, 58],
    last:  array[ 22,     58]
  }, 
  {
    first: array[ 22, 58],
    last:  array[ 23, 54]
  }, 
  Object, Object, Object, Object, Object, /*98 more…*/ ]

如果脚本找到类似的值,则应该将它们推送到另一个数组。

var arrayCollect = []
arrayCollect.push([similar values]);

结果示例

arrayCollect=[[similar values], [similar values]];

相似值是相似值([Object, Object...])的整个集合

我试过这个:

var array =[];
for(var i=0; i < arrayLastFirst.length; i++){
    if(arrayLastFirst[i].first[0] &&
       arrayLastFirst[i].first[1] == 
       arrayLastFirst[i].last[0]  && 
       arrayLastFirst[i].last [1]) {
          array.push(arrayLastFirst[i].first, arrayLastFirst[i].last);
    }
}

但这是不正确的,我不知道错在哪里,我怀疑是错误的逻辑。我修改了我的代码,以便更好地理解我最终想要的内容。所以我的输出需要是这样的:

Array[
      [
       {
        first: array[ 24, 58],
        last:  array[ 25,59]
        },
        {
        first: array[ 25, 59],//its inside that array couse the first value is the same like the last value before that.
        last:  array[ 23,57]
        },
        {
        first: array[ 25, 59],
        last:  array[ 26, 54]
        }
       ],
       [
        {
        first: array[ 23, 58],
        last:  array[ 22,     58]
        }, 
        {
        first: array[ 22, 58],
        last:  array[ 23, 54]
        }//and these are similar values couse last and the first are the same
       ]
      ]

也许这更能理解我最终所需要的。

假设您有以下数据:

var arrayLastFirst = [
    {first: [1, 2], last: [3, 4]},
    {first: [5, 6], last: [6, 7]},
    {first: [0, 8], last: [8, 9]}
];

此测试条件

arrayLastFirst[i].first[0] &&
arrayLastFirst[i].first[1] == arrayLastFirst[i].last[0] &&  
arrayLastFirst[i].last[1]

意味着你想要

  • 的元素0第一个不为null
  • 最后的元素1进行AND运算,使其不为null
  • 第一个的元素1进行AND运算,使其等于最后一个

这导致了这个阵列:

array == [[5, 6], [6, 7]];

我认为您只需要在循环中放入一个循环。因此,您要获取要比较的第一个数组,并在整个数组中循环,记住不要将其与自身匹配。比你抓住第二个,并将其与整个阵列等进行比较。

for (i = 0; i < arrayLastFirst.length; i++) {
  for (f = arrayLastFirst.length; f++ {
      if( arrayLastFirst[0][i] == arraLastFirst[0][f] || 
           arrayLastFirst[0][i]== arrayLastfirst[0][f] )
}}

编辑:很抱歉,错误的代码已经习惯了stackerflow,但这不检查你可以把if i==i放在那里,以防止与本身进行比较

这样的东西?

var sources = [
  {
    first: [ 23.53521729574, 58.94867816392],
    last:  [ 24.5368636,     59.9483547    ]
  },
  {
    first: [ 24.53521729574, 59.94867816392],
    last:  [ 23.5368636,     58.9483547    ]
  },
  {
    first: [ 23.5368636, 58.9483547],
    last:  [ 23.5368636, 58.9483547]
  }, 
  {
    first: [ 23.53521729574, 58.9483547],
    last:  [ 23.5368636,     58.9483547]
  }, 
  {
    first: [ 23.5368636, 58.9483547],
    last:  [ 23.5368636, 58.9483547]
  }, 
  {
    first: [ 23.53521729574, 58.9483547],
    last:  [ 23.5368636,     58.9483547]
  }, 
  {
    first: [ 23.53521729574, 58.9483547],
    last:  [ 23.5368636,     58.9483547]
  }
];
var results = {};
for(var z in sources) {
    var sz = sources[z];
    if(!results[sz.last]) {
        results[sz.last] = {keys:[],similar:[]}
    }   
    results[sz.last].keys.push(sz); // add all to .keys anything with same .last
}
for(var z in sources) {
    var sz = sources[z];
    var exists = results[sz.first];
    if(exists) {
        exists.similar.push(sz); // add all to .similar anything with same .first
    }
}
console.log(JSON.stringify(results,null,2))

结果:

{
  "24.5368636,59.9483547": {
    "keys": [
      {
        "first": [
          23.53521729574,
          58.94867816392
        ],
        "last": [
          24.5368636,
          59.9483547
        ]
      }
    ],
    "similar": []
  },
  "23.5368636,58.9483547": {
    "keys": [
      {
        "first": [
          24.53521729574,
          59.94867816392
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.5368636,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.53521729574,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.5368636,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.53521729574,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.53521729574,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      }
    ],
    "similar": [
      {
        "first": [
          23.5368636,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      },
      {
        "first": [
          23.5368636,
          58.9483547
        ],
        "last": [
          23.5368636,
          58.9483547
        ]
      }
    ]
  }
}