如何使用打字稿删除数组重复?

时间:2021-06-14 14:36:38

标签: javascript typescript

我的场景,我试图删除字符串值重复数组并仅打印索引的唯一值。例如:

const numbers =  [
"3445612712345678", 
"3445613787654321", 
"3445615712345678", 
"3445618787654321", 
];

var uniqueValue = numbers.filter((v, i, a) => a.indexOf(v) === i);
console.log(uniqueValue);

如果你看到了,我的字符串值数组的前 5 个字符对于所有索引都是相同的,然后接下来的两个值将发生变化,但是在字符串值的第 8 个位置的这两个值一一匹配之后,这里我必须从第 8 个位置直到结束然后需要打印值的唯一索引。

[
"34456 12 712345678",  // Same(1) 712345678 // Add
"34456 13 787654321",  // Same(2) 787654321 // Add
"34456 15 712345678",  // Same(1) 712345678 // Remove
"34456 18 787654321",  // Same(2) 787654321 // Remove
];

预期结果://根据第8个字符串位置直到结束字符串字符位置检查并需要删除重复项。因为前五个数字是静态的,然后第6和第7个位置数字是动态的,但无需考虑这一点以获得唯一性。从第 8 到最后的位置数字只能相互比较,在此基础上我们必须获得唯一值。

[
"3445612712345678", 
"3445618787654321", 
];

1 个答案:

答案 0 :(得分:0)

您可以通过获取 slicing 最后 9 个字符之后的唯一值来实现此目的。然后使用 find 查找初始数组中的第一个匹配项。

const data = [
  "34456 12 712345678", // Same(1) 712345678 // Add
  "34456 13 787654321", // Same(2) 787654321 // Add
  "34456 15 712345678", // Same(1) 712345678 // Remove
  "34456 18 787654321", // Same(2) 787654321 // Remove
];

// get unique values (from last 9 characters)
const unique = [...new Set(data.map(item => item.slice(9)))];

const result = unique.map((u) => {
  return data.find((d) => d.includes(u)); // find matches
});

console.log(result);

相关问题