我有这两个数组:
var a = ['a123', 'a321', 'a444', 'b3132', 'a123'];
var b = ['b3132', 'a321', 'a444', 'a123', 'a123'];
我希望将它们与一个条件合并,并且当字符' b'在字符串上,忽略它并继续合并,因此结果将是:
var ab = ['a123', 'a321', 'a444'];
我已经在一个循环中逐个检查数组值,但我认为有更好的解决方案。
答案 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)
您可以使用concat
和filter
完成此操作,而无需循环播放两个数组
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)