【问题标题】:Javascript Arrays - Find Duplicates [duplicate]Javascript 数组 - 查找重复项 [重复]
【发布时间】:2013-07-31 21:30:42
【问题描述】:

这是我的问题……

给定一个以数字作为函数参数的数组,生成一个包含数组中任何重复数字的结果数组。 例如,给定数组 [1, 2, 4, 4, 3, 3, 1, 5, 3],它应该返回 [1, 4, 3]。对于额外的奖励积分返回一个排序的数组。

我从 Javascript 开始 - 但是我知道这种语言,但以正确的方式使用它(应该如此),我仍然可以掌握。

我的伪代码是:

用上面的数字创建一个数组var numbers = [1, 2, 4, 4, 3, 3, 1, 5, 3];

然后创建一个名为“result”的空数组var result = [];

创建一个遍历 var 编号的 for 循环以检查重复项,然后用重复项填充空数组“结果”

for (var i = 0;i < numbers.length; i++) {
 //This is where I'm stuck...
}

我不确定在 for 循环中要做什么来填充 var 结果并将其放入混合中...给定的数组必须是一个有意义的函数参数,以便您可以将数字更改为一个地方。

非常感谢您迄今为止对我的思考过程的任何反馈,但最终我想学习如何实现这一目标。

这是迄今为止我的进步的 JSFiddle...http://jsfiddle.net/fbauW/

【问题讨论】:

  • 这到底是什么......额外的奖励积分..downvote..google 你会在stackoverflow上得到10个不同的答案......
  • 哇,我真的没想到会有这样的负面反应......我更认为这表明我正在努力并且我正在积极寻求帮助,以便我可以学习和理解......这不是作为开发人员的一部分吗?还是你们两个忘记了……
  • 不要冒犯朋友,所以已经回答了这样的问题!!!看看...如果您想实际学习一些东西,您会尝试一些东西...您可以展示您的代码..因为你尝试任何东西..当你说extra bonus points是什么意思..你怎么能给额外的奖励积分..请解释一下
  • 这是一个作业,您将在上面看到我给出了一个伪代码示例,说明我对问题的处理方法的思考过程。我已经走到了一堵墙 - 只是来堆栈寻求帮助和理解来学习......理想情况下 - 不必证明这个问题会很好 - 这并不像缺乏信息。你看到了你不喜欢的东西并决定说出来 - 很酷......这是我的回应 - 要么帮助,因为这就是堆栈溢出的原因,要么保持安静。
  • 我从 Rebecca Murphy 的 js 评估中认出了那个数组!甚至她也建议寻求帮助,所以不要出汗。

标签: javascript


【解决方案1】:

执行此操作的一种方法(并非唯一方法)是检查数组中的现有元素。看看 JavaScript 的 lastIndexOf 函数:

http://www.w3schools.com/jsref/jsref_lastindexof_array.asp

如果对象在你的数组中不存在,它将返回 -1,如果它存在,将返回一个比你所在位置更晚的位置的索引。所以你可以在循环中使用 if 语句来检查是否没有另一个包含您的号码的索引,并将其添加到您的结果数组中,如果且仅当您返回的索引!=您当前所在的索引(如果它们相等,这意味着只有一个该元素在列表)。

如果您需要更多帮助,请在此处评论,我可以输入一些代码!

祝你好运!

【讨论】:

  • 这是我创建的一个 JSFiddle,我似乎不知道如何进一步了解这一点 - 你能帮忙吗? jsfiddle.net/fbauW
  • @Filth 似乎您尚未将 lastIndexOf 逻辑应用于您的 if 语句。我修改了 if 语句以包含以下检查: 1. arr 中是否单独存在该元素? 2. 我们是否已经将元素声明为重复元素?如果元素在 arr 中不是单独的,并且我们还没有将其添加为副本,那么让我们添加它。这是更新的工作小提琴:jsfiddle.net/gbzVF/1
  • 哇,非常感谢@pixelatory - 将彻头彻尾地研究这个!
  • 感谢@Filth 再次发布此问题。由于我遇到了同样的问题,并且在堆栈溢出的其他类似问题上找不到解决方案。这个解决方案也帮助了我。另外,我想讨厌那些对这个问题投了反对票的人。这个社区更多地是为了讨论和帮助,而不是为了气馁。我也做了一个小改动,另外,我对它做了一个小改动以正确渲染结果jsfiddle.net/gbzVF/10
【解决方案2】:
Array.prototype.contains = function(k) {
  for ( var p in this)
    if (this[p] === k)
      return true;
  return false;
};
//this prototype function checks if an element is already in the array or not
//go through all the array and push the element to result if it is not 
//this way we can eliminate duplicates 
//result will contain the resultant array
function findDuplicates(Numbers) {
  var arrayLength = Numbers.length, i, j, result = [];
  for (i = 0; i < arrayLength; i++) {
    for (j = 0; j < arrayLength; j++) {
      if (a[i] == a[j] && i != j && !result.contains(a[i])) {
        result.push(a[i]);
      }
    }
  }
  return result;
}

【讨论】:

  • 没有解释的代码几乎总是没用的。
  • 你怎么打字这么快...
  • 昨天刚拿到作业
  • 感谢 Lonely,您介意解释一下这里发生了什么,以便我学习吗?
  • Lonely 在这里所做的是原型设计(将其视为“自定义”或“扩展”一个名为 contains 的数组的函数,它本身通过 for 循环来搜索项目。如果它确实如此,然后它返回 true,否则返回 false。
猜你喜欢
  • 2014-08-08
  • 2019-01-02
  • 2014-01-26
  • 2011-04-26
  • 2016-06-23
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多