【问题标题】:Remove duplicates in array of arrays based on the lenght of string on 1st position. JS根据第一个位置的字符串长度删除数组数组中的重复项。 JS
【发布时间】:2021-05-01 09:02:03
【问题描述】:

我有一个这样的数组:

arr = 
[
  [0 ,  abc  ],
  [7 ,  def  ],
  [10,  ghi  ],
  [0 , abcjkl]
]

我想要的是根据第 0 个位置的值(在我的示例中:[0, abc], [0, abcjkl])查找重复项,并在第一个位置删除具有较短字符串的数组。结果应如下所示:

[
  [7 ,  def  ],
  [10,  ghi  ],
  [0 , abcjkl]
]

感谢您的帮助。

编辑:

我的算法似乎不是最好的方法。

function findDupes(arr) {
  let dupe = null;
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
      if (arr[i] !== arr[j]) {
        if (arr[i][1] === arr[j][1]) {
          if (arr[i][0].length >= arr[j][0].length) {
            dupe = arr[j];
          } else {
            dupe = arr[i];
          }
        }
      }
    }
  }
  return dupe;
}

let check = findDupes(arr);
while (check) {
    filteredValues.splice(arr.indexOf(check), 1);
    check = findDupes(arr);
}

【问题讨论】:

  • 到目前为止你有什么尝试?
  • @expressjs123 我编辑了问题。

标签: javascript arrays duplicates


【解决方案1】:

将数组缩减为一个Map,当找到一个长度更大的副本时,删除前一个并添加新的:

const data = [
  [0 ,  'abc'  ],
  [7 ,  'def'  ],
  [10,  'ghi'  ],
  [0 , 'abcjkl']
]

const result = Array.from(
 data.reduce((acc, row) => {
  const [key, value] = row
 
  if(value.length > (acc.get(key)?.length ?? 0)) {
    acc.delete(key)
    acc.set(key, value)
  }
  
  return acc
 } , new Map())
)

console.log(result)

【讨论】:

    【解决方案2】:

    您可以使用哈希映射来解决这个问题。循环遍历每个内部数组并将元素放入哈希映射中,例如 let hashMap = {0:'abc',10:'ghi'}。

    如果key已经存在于hash Map中,检查该值的长度是否小于新值,如果是,则替换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 2015-08-22
      • 1970-01-01
      • 2017-12-30
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多