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)
我有以下映射函数,如果对象中的每个元素都存在,则将其去掉逗号。
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)