【问题标题】:how do find duplicate values in a multidimensional array如何在多维数组中查找重复值
【发布时间】:2015-02-27 09:14:46
【问题描述】:

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

修改示例:

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
       ]
      ]

也许这更容易理解我最终需要的东西。

【问题讨论】:

  • “相似”是指“相同”吗?
  • @Andy 我认为这意味着重复值,但您不能真正直接测试对象之间的相等性,因此“相似”。
  • 是的,我的意思是“相同(重复值)”

标签: javascript arrays sorting object


【解决方案1】:

假设你有这个数据:

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]

表示你想要

  • first 的元素 0 不为空
  • last 的第 1 个元素不为空
  • AND 元素 1 的 first 等于元素 0 last

这导致了这个数组:

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

【讨论】:

  • 你误会我了,我猜,因为我想要别的东西 :)
  • 当然我不是说你想要那个,只是你的条件导致了那个。给我们一个简短的例子,其中包含输入的数量和预期的输出。我们将为您提供所需的条件。
  • tnx 为您解答,我终于解决了。
【解决方案2】:

我认为你只需要在循环中放置一个循环。 所以你抓住你想比较的第一个并循环遍历整个数组,记住不要将它与自身匹配。而不是你抓住第二个并将其与整个数组等进行比较。

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] )

}}

编辑:对于习惯了 stackoverflow 的错误代码感到抱歉,这仍然没有检查 您可以将 if i == i 放在那里以防止与自身进行比较

【讨论】:

  • 也许你可以举个例子什么的?
  • 不,我需要别的东西,我需要获取值,而不是如果一个对象内的数组值与另一个对象的另一个值相等示例:来自 object1 的第一个值与来自 object3 的最后一个值相等,我需要那个
  • 您是要订购它们还是只是通过检查最后一个值和第一个值来找到匹配的两个数组?我猜你只想要它们,如果它们按照它们出现的顺序匹配?
【解决方案3】:

这样的?

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
        ]
      }
    ]
  }
}

【讨论】:

  • allmoust,但我需要将相似的值放入数组 [],然后以相同的方式获取下一个相似的值,例如,如果我有 3 个相似的值,如果第一个对象的值首先等于第三对象的最后一个值,它们将被推送到同一个数组。像一个对象有一个值 {first:[23.5368636, 58.9483547],(相同的值但来自另一个对象,它可能来自对象 98 等等)},{再次类似值}
  • 只需将{first:bla,last:bla} 解释为更简单的术语,例如ABC.. 这里没有人理解您所说的相似是什么意思(也就是您在评论中所说的重复) 6 小时前)
  • 好的,我尽力了,我不会抱怨,tnx 的帮助,我很高兴。示例:array{first:a,last:b},{first:b,last:c},{first:b,last:d};它们是绳节点,我需要将它们放入数组 {[{first :a,last:b},{first:b,last:c},{first:b,last:d}],[等等]};
  • 看更新后的答案,如果last:b很多,我合并一下,比如[{first:a,last:b},{first:x,last:b},{first:b,last:c}]' would be: {b:{keys:[{first:a,last:b},{first:x,last:b}],values:[{first:b,last:c}], c:{keys:{first:b,last:c},values:[]}}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2013-06-24
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多