【问题标题】:Merge two string arrays excluding some values合并两个字符串数组,不包括某些值
【发布时间】:2017-04-01 03:01:34
【问题描述】:

我有这两个数组:

var a = ['a123', 'a321', 'a444', 'b3132', 'a123'];
var b = ['b3132', 'a321', 'a444', 'a123', 'a123'];

我想将它们与一个条件合并,并且该值尚未在数组中,当字符“b”在字符串上时,忽略它并继续合并,因此结果将是:

var ab = ['a123', 'a321', 'a444'];

我已经解决了一个循环检查数组值的问题,但我认为有更好的解决方案。

【问题讨论】:

  • 你试过了吗?

标签: javascript arrays merge


【解决方案1】:

一种 ES6 解决方案 - 使用 Set() 仅获取唯一项目 spread,然后过滤数组以删除包含 b 的项目。如果b 始终是字符串中的第一个字母,则使用String.prototype.startsWith() 而不是Array.prototype.includes()

const a = ['a123', 'a321', 'a444', 'b3132', 'a123'];
const b = ['b3132', 'a321', 'a444', 'a123', 'a123'];

const result = [...new Set(a.concat(b))].filter((item) => !item.includes('b'));

console.log(result);

【讨论】:

  • 哇,看起来很聪明的解决方案。
  • 这是一个 ES6 解决方案,因此如果您需要支持旧版浏览器,它可能不适合您。
  • 那就完美了,我正在构建的应用程序不需要旧浏览器支持:)
【解决方案2】:

您可以像这样使用filter()concat()

var a = ['a123', 'a321', 'a444', 'b3132', 'a123'];
var b = ['b3132', 'a321', 'a444', 'a123', 'a123'];

var result = a.concat(b).filter(function(e) {
  if (!this[e] && e.indexOf('b') == -1) {
    return this[e] = true;
  }
}, {})

console.log(result)

【讨论】:

    【解决方案3】:

    您可以使用concatfilter 简单地做到这一点,而无需循环两个数组

    var a = ['a123', 'a321', 'a444', 'b3132', 'a123'];
    var b = ['b3132', 'a321', 'a444', 'a123', 'a123'];
    var c = a.concat(b);
    var d = c.filter(function (item, index) {
       return c.indexOf(item) == index;
    });
    
    console.log(d);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2016-01-19
      • 2022-01-18
      • 2021-10-26
      • 2012-09-09
      相关资源
      最近更新 更多