合并两个字符串数组,不包括某些值

时间:2016-11-17 14:11:55

标签: javascript arrays merge

我有这两个数组:

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

我希望将它们与一个条件合并,并且当字符' b'在字符串上,忽略它并继续合并,因此结果将是:

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

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

3 个答案:

答案 0 :(得分:4)

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);

答案 1 :(得分: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);




答案 2 :(得分:1)

您可以像这样使用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)