【发布时间】:2017-08-12 13:50:04
【问题描述】:
在 Chrome 控制台中我有一个字符串:
var string = 'john, john, bob, nina, colin, bob, luck, robert, nina, john, jack';
然后使用两种看起来与我相同的方法对其进行修改并分配一个新值:
第一种方法:
var string2 = string.split(", ").filter(function(value, index, array){
return index === array.indexOf(value);
}).join(', ');
第二种方法:
var string3 = string.split(", ").filter(function(value, index, array){
if(index === array.indexOf(value)) return index;
}).join(', ');
这两种方法应该怎么做:
- 将字符串分别转换为每个单词的数组。
- 过滤数组,使不存在重复值。
- 将数组转回字符串格式。
我希望 string2 和 string3 的值是:
"john, bob, tony, nina, colin, luck, robert, jack"
它们应该严格相同(根据我的逻辑)。
我实际得到的:
string2 = "john, bob, tony, nina, colin, luck, robert, jack";
string3 = "bob, tony, nina, colin, luck, robert, jack"
第二个字符串中缺少“John”。
我已经检查过的内容:
- 严格比较 (===),即在 if-statement () 对于第一个“john”是正确的。
- 既索引(参数 函数)和第一个“约翰”的值的索引是 0 符合预期。
我的问题:
请解释一下,为什么结果不同?
【问题讨论】:
-
第一个没有意义。您必须始终从
filter谓词函数返回一个布尔值 - 有时不是undefined,有时是数字。 -
您的“我实际得到的”结果看起来是相反的。
-
1.我从这里得到了用于 string2 的函数:stackoverflow.com/questions/16843991/… 2。由于错误,交换了帖子中的函数。现在是正确的。
-
您的第二种方法对我来说很好,不会返回重复项:
string3 == "john, bob, nina, colin, luck, robert, jack"。我不确定你的预期结果是从哪里来的。
标签: javascript arrays string function