如何确定 TypeScript 中的两个字符串是否相同?
How to find out if two Strings are the same in TypeScript?
我有一个包含一些字符串的数组,我想遍历该数组以检查我没有两个相同的字符串。
在 java/javascript 中,我会像下面那样使用 equals() 方法,但这似乎不起作用。
array: Array<any> = [];
for(var i = 1; i < array.length; i++){
if(array[i].equals(array[i-1])){
array.splice(i);
}
}
是否有任何其他功能或简单的方法可以做到这一点?
您需要使用 ==
运算符或 ===
运算符(更多关于差异的信息:Which equals operator (== vs ===) should be used in JavaScript comparisons)。
所以:
for(var i = 1; i < array.length; i++){
if(array[i] === array[i-1]){
array.splice(i);
}
}
但是你需要对数组进行排序才能工作。
这是一个替代实现:
let array = ["one", "two", "one", "three", "two", "four", "one"];
array.sort((a, b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}).filter((item, index) => item !== array[index - 1]); // ["four", "one", "three", "two"]
编辑
如果您的数组包含日期,那么您应该这样做:
for(var i = 1; i < array.length; i++){
if(array[i] == array[i-1]){
array.splice(i);
}
}
或
for(var i = 1; i < array.length; i++){
if(array[i].toString() === array[i-1].toString()){
array.splice(i);
}
}
恐怕您提出的算法将无法工作,除非字符串数组已排序,因此重复条目彼此相邻。
如果数组的大小很小,一个非常直接的解决方案是遍历数组两次,如下所示:
for (var i = 0; i < array.length; i++)
for(var j = i+1; j < array.length; j++)
if (array[i] == array[j])
array.splice(j);
其他经典方法包括预先对数组进行排序,然后然后做你正在做的事情,或者使用对象/哈希集来过滤元素。
这是一个使用 reduce & Object.key 的版本。
它在性能上应该也很不错,因为它使用对象字面量作为一种查找。
let array = ["one", "two", "one", "three", "two", "four", "one"];
let deduped = Object.keys(array.reduce((c,a) => { c[a]=true; return c; },{}))
console.log(deduped);
我有一个包含一些字符串的数组,我想遍历该数组以检查我没有两个相同的字符串。
在 java/javascript 中,我会像下面那样使用 equals() 方法,但这似乎不起作用。
array: Array<any> = [];
for(var i = 1; i < array.length; i++){
if(array[i].equals(array[i-1])){
array.splice(i);
}
}
是否有任何其他功能或简单的方法可以做到这一点?
您需要使用 ==
运算符或 ===
运算符(更多关于差异的信息:Which equals operator (== vs ===) should be used in JavaScript comparisons)。
所以:
for(var i = 1; i < array.length; i++){
if(array[i] === array[i-1]){
array.splice(i);
}
}
但是你需要对数组进行排序才能工作。
这是一个替代实现:
let array = ["one", "two", "one", "three", "two", "four", "one"];
array.sort((a, b) => {
if (a < b) return -1;
if (a > b) return 1;
return 0;
}).filter((item, index) => item !== array[index - 1]); // ["four", "one", "three", "two"]
编辑
如果您的数组包含日期,那么您应该这样做:
for(var i = 1; i < array.length; i++){
if(array[i] == array[i-1]){
array.splice(i);
}
}
或
for(var i = 1; i < array.length; i++){
if(array[i].toString() === array[i-1].toString()){
array.splice(i);
}
}
恐怕您提出的算法将无法工作,除非字符串数组已排序,因此重复条目彼此相邻。
如果数组的大小很小,一个非常直接的解决方案是遍历数组两次,如下所示:
for (var i = 0; i < array.length; i++)
for(var j = i+1; j < array.length; j++)
if (array[i] == array[j])
array.splice(j);
其他经典方法包括预先对数组进行排序,然后然后做你正在做的事情,或者使用对象/哈希集来过滤元素。
这是一个使用 reduce & Object.key 的版本。
它在性能上应该也很不错,因为它使用对象字面量作为一种查找。
let array = ["one", "two", "one", "three", "two", "four", "one"];
let deduped = Object.keys(array.reduce((c,a) => { c[a]=true; return c; },{}))
console.log(deduped);