【问题标题】:JavaScript - Filtering array with identical elementsJavaScript - 过滤具有相同元素的数组
【发布时间】:2017-05-12 06:40:33
【问题描述】:

我正在处理这段代码,我需要过滤具有多个相同元素的数组,如下所示;

vacant = [
"A510.4 - 0h 45 m",
"A520.6 - 3h 0 m",
"A250.1 - 3h 0 m",
"A340.1 - 3h 15 m",
"A320.2 - 3h 0 m",
"A240.4 - 4h 0 m",
"A210.3 - 4h 0 m",
"A520.5 - 5h 0 m",
"A250.1 - 6h 0 m",
"A240.4 - 7h 0 m",
"A320.6 - 8h 0 m",
"A340.1 - 8h 0 m"]

uniqueVacant - 数组中的相同元素是:

A250.1 - 3 小时 0 米 / A250.1 - 6 小时 0 米

A340.1 - 3 小时 15 米 / A340.1 - 8 小时 0 米

A240.4 - 4 小时 0 米 / A240.4 - 7 小时 0 米

我已经从元素中过滤掉了时间戳,所以唯一需要做的就是比较元素名称;

function getName(str) {
  return str.substring(0, str.indexOf('-'));
}

var uniqueVacant = [];
vacant.forEach(function (vacantStr) {
  uniqueVacant.push(getName(vacantStr))
});

结果应该是这样的,只留下第一个元素具有相同的名称,并删除稍后打印出来的第二个元素;

uniqueVacant = [
"A510.4 - 0h 45 m",
"A520.6 - 3h 0 m",
"A250.1 - 3h 0 m",
"A340.1 - 3h 15 m",
"A320.2 - 3h 0 m",
"A240.4 - 4h 0 m",
"A210.3 - 4h 0 m",
"A520.5 - 5h 0 m",
"A320.6 - 8h 0 m"]

// Removed A250.1 - 6h 0 m, A340.1 - 8h 0 m, A240.4 - 7h 0 m,

请注意,当元素的计时器到时,它们会从数组中删除,然后如果数组中没有更多相似之处,则同名的第二个元素应该重新出现在数组中。

相似之处也因日而异,有时只有 2 个相似元素,而其他日子可能有 8 个或更多。

有什么快速有效的方法吗?

【问题讨论】:

  • 你需要找到独特的元素不是吗?
  • @NairAthul 我需要在数组中找到相同的元素,然后过滤它,只留下第一个同名的元素并删除第二个。

标签: javascript arrays filter compare element


【解决方案1】:

试试Array#reduce

var vacant = [
  "A510.4 - 0h 45 m",
  "A520.6 - 3h 0 m",
  "A250.1 - 3h 0 m",
  "A340.1 - 3h 15 m",
  "A320.2 - 3h 0 m",
  "A240.4 - 4h 0 m",
  "A210.3 - 4h 0 m",
  "A520.5 - 5h 0 m",
  "A250.1 - 6h 0 m",
  "A240.4 - 7h 0 m",
  "A320.6 - 8h 0 m",
  "A340.1 - 8h 0 m"
]

console.log(vacant.reduce((a, b) => {
  var k = a.map(a => a.split('-')[0])
  if (!k.includes(b.split("-")[0])) {
    a.push(b)
    k.push(b.split("-")[0])
  }
  return a;
}, []))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2011-06-29
    • 1970-01-01
    • 2019-08-18
    • 2014-06-13
    • 2021-12-31
    相关资源
    最近更新 更多