javascript 映射函数去除逗号并保留唯一值

javascript map function to strip comma and keep unique values

我有以下映射函数,如果对象中的每个元素都存在,则将其去掉逗号。

var items = ['mum, dad', 'uncle, dad', 'brother, sister'];
var clean = [];
clean = items.filter(function(item) {
  return item.split(',');
});

问题是我没有得到预期的结果。我的 clean 输出与 items 输出相同。 它应该是这样的:

console.log(items) //  ['mum, dad', 'uncle, dad', 'brother, sister']
console.log(clean) //  ['mum', dad', 'uncle', dad', 'brother', sister']

还有一点,如何才能只取到唯一值呢,大家可以看到,去掉逗号后,有些值是重复的,比如dad,怎么才能只保留一个?

您正在使用 filter 而不是 map

使用 map 将 return 你的数组。如果 ES6 不是一个选项,您可以将它合并到一个数组中并删除重复项,如下所示:

var items = ['mum, dad', 'uncle, dad', 'brother, sister'];
var clean = [];
clean = items.filter(function(item) {
 return item.split(',');
});
var merged = [].concat.apply([], clean);
var unique = arr.filter(function(elem, index, self) {
  return index == self.indexOf(elem);
})

您可以使用 map() 而不是过滤器和 ES6 Set 到 return 只有独特的元素。

var items = ['mum, dad', 'uncle, dad', 'brother, sister'];
var clean = [...new Set([].concat(...items.map(e => e.split(', '))))]

console.log(clean)

对于 IE 和其他旧版本的浏览器,您可以使用此解决方案。

var items = ['mum, dad', 'uncle, dad', 'brother, sister'];
var clean = [].concat.apply([], items.map(function(e) {
  return e.split(', ');
})).filter(function(e) {
  return !this[e] ? this[e] = 1 : false;
}, {})

console.log(clean)

仅过滤 return 那些对特定函数具有真实值的元素。如果你想对每个项目做一些operation/manipulation,那么你必须去寻找地图。尽量简单,你只需要映射每个元素,拆分它,然后将它附加到干净的数组中。让我们看一下这段简单的代码。

function uniqueArray2(arr) {
    var a = [];
    for (var i=0, l=arr.length; i<l; i++)
        if (a.indexOf(arr[i]) === -1 && arr[i] !== '')
            a.push(arr[i]);
    return a;
}
var items = ['mum, dad', 'uncle, dad', 'brother, sister'];
var clean = [];
items.map(function(item) {
  var splitArray = item.split(',');
  for(var i=0; i<splitArray.length; i++){
    clean.push(splitArray[i]);
  }
});
clean = uniqueArray2(clean);
console.log (clean)