2

这是我的问题...

给定一个填充有数字作为函数参数的数组,生成一个包含数组中任何重复数字的结果数组。例如,给定数组 [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/

4

2 回答 2

5

这样做的一种方法(并且不是唯一的方法)是检查数组中的现有元素。看一下 JavaScript 的 lastIndexOf 函数:

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

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

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

祝你好运!

于 2013-07-31T11:31:24.380 回答
1
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;
}
于 2013-07-31T11:26:04.843 回答