在多维 Javascript 数组中返回重复项



我不仅在StackOverflow上搜索了高低搜索,而且在网络上其他地方搜索了很多其他地方。我已经尝试了一切,但我的逻辑从根本上存在缺陷。我很抱歉引入了另一个"数组中的重复项"问题,但我被困住了,似乎没有什么按预期工作。

无论如何,我有一个多维 JavaScript 数组,只有 2 级深。

var array = [[Part #, Description, Qty:],
            [Part #, Description, Qty:],
            [Part #, Description, Qty:]]; //etc

我需要做的是创建一个搜索array并返回任何重复的"Part #"行的函数。当它们被返回时,我希望返回整个内部数组,包括描述和数量。

这样做的诀窍是,符合"重复"条件的部分#会以不同的方式结束(特别是最后4个字符),因此使用String.prototype.substr是有意义的(对我来说)。

我知道

数组中以我正在寻找的方式存在重复项,所以我知道如果我有解决方案,它会返回那些 Part #。

以下是我迄今为止尝试过的方法,使我最接近解决方案:

function findDuplicateResults(arr) {
var result = [];
for (var i = 0; i < arr.length; i++) {
    if (arr[i][0].substr(0,5) === arr[++i][0].substr(0,5)) {
        result.push(arr[i]);    
    }
}
return console.log(result);

}

我的想法是,如果数组(带有 substr(0,5) 的元素等于行中的下一个元素,则将其推送到结果数组。我也需要那里的另一个副本。代码的要点是仅显示带有 substr(0,5) 的重复。

我尝试使用高阶函数,例如map,forEach,reduce和filter(过滤器是让我难以置信为什么它不做我想要的函数),但我只能以这种方式返回[]或整个数组。我用于上述高阶函数的逻辑保持不变(这可能是这里的问题)。

我希望我的if状况是问题最多的。任何指示或解决方案都非常感谢。

您的代码中存在错误。当你使用 ++i 时,你正在更改 i 的值,因此它将在下一次迭代中跳过一个项目。

关于逻辑,你只是将一个项目与下一个项目进行比较,而实际上你应该将每个项目与所有项目进行比较:

function findDuplicateResults(arr) {
  var result = [];
  for (var i = 0; i <= arr.length - 1; i++) {
    for (var k = 0; k <= arr.length - 1; k++) {
      if (i !== k && arr[i][0].substr(0,5) === arr[k][0].substr(0,5)) {
        result.push(arr[i]); 
      }
    }
  }
  return result;
}

虽然,可以删除"substr",而"for"循环可以用高阶函数代替:

function findDuplicateResults(arr) {
  return arr.filter(function(item1){
    return arr.filter(function(item2){
      return item1[0] === item2[0];
    }).length > 1;
  });
}

相关内容

  • 没有找到相关文章

最新更新