我的场景,我试图删除字符串值重复数组并仅打印索引的唯一值。例如:
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",
];
答案 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);