删除数组中字符后面的部分字符串并删除重复的元素

时间:2017-05-30 16:02:24

标签: javascript jquery

我试图在'_'之后删除数组中元素的部分值,并在完成后删除所有重复的元素。

数组看起来像

names =  ["ann_w", "james_q", "ann_q", "peter_p", "steve_q", "james_s"];

我正在尝试将其转换为

names = ["ann", "james", "peter", "steve"];

下面的代码返回undefined,无法弄清楚如何删除所有重复的元素。

for (i = 0; i < names.length; i++) {
   names[i] = names[i].substring(names[i].indexOf("_") + 1);
}

6 个答案:

答案 0 :(得分:4)

使用Set&amp;图:

var names =  ["ann_w", "james_q", "ann_q", "peter_p", "steve_q", "james_s"];

var unique_names = [ ...new Set(names.map(name => {
   return name.split('_')[0]
}))]
console.log(unique_names)

答案 1 :(得分:2)

var names = ["ann_w", "james_q", "ann_q", "peter_p", "steve_q", "james_s"];

var tmp = names.map(function(n){
   return n.split("_")[0];
}).sort();

// tmp = ["ann", "ann", "james", "james", "peter", "steve"]

var result = [];

tmp.forEach(function(t){
    if(!result.includes(t))
        result.push(t);
});

console.log(result);

答案 2 :(得分:0)

您可以尝试在字符串上使用split而不是使用子字符串,然后您将获得一个字符串数组,并且因为您只需要第一个名称,所以您需要使用数组[0]。

此外,您正在收回错误,因为您尝试将整个数组子串而不是字符串。你需要做名字[i] = names [i] .substring

答案 3 :(得分:0)

您可以执行此操作:使用array#reduceObject.keysreduce将创建一个名称为键的对象,然后您可以通过Object.keys()将该键作为数组获取。

var names =  ["ann_w", "james_q", "ann_q", "peter_p", "steve_q", "james_s"];

var obj = names.reduce(function(r,v) {
  var name = v.split('_')[0];
  if(!r[name]) {
    r[name] = 1;
  }
  return r;
}, {});

console.log(Object.keys(obj));

答案 4 :(得分:0)

var names =  ["ann_w", "james_q", "ann_q", "peter_p", "steve_q", "james_s"];
var finalArray = [];
for (var i = 0; i <names.length; i++){
var substringArray = names[i].split("_");
if(finalArray.indexOf(substringArray[0]) == -1) finalArray.push(substringArray[0]);
}

https://jsfiddle.net/3z3naanb/9/

答案 5 :(得分:0)

df1.combine_first(df2)
Out: 
     A    B    C    D    E    F
0   A0   B0   C0   D0  NaN  NaN
1   A1   B1   C1   D1  NaN  NaN
2   A2   B2   C2   D2   E2   F2
3  NaN  NaN  NaN  NaN   E3   F3
4  NaN  NaN  NaN  NaN   E4   F4