这段代码应该返回hits = [“Heather,”Heather“,”Heather“]但它没有。我不太确定我做错了什么。
var text = ["Heather", "kfdjsalfjdai", "fdjafhjdksafh", "Heather", "Heather", "fjdiafjdoisfhoids"];
var myName = "Heather";
var hits = [];
for(var i = 0; i < text.length; i++) {
if (text[i] === myName[i]) {
for(var j = i; j < (myName.length + i); j++); {
hits.push(text[j]);
}
}
}
答案 0 :(得分:3)
您可以使用数组filter
功能:
var hits = text.filter(function (obj) {
return obj === myName;
});
<强>段强>
var text = ["Heather", "kfdjsalfjdai", "fdjafhjdksafh", "Heather", "Heather", "fjdiafjdoisfhoids"];
var myName = "Heather";
var hits = text.filter(function (obj) {
return obj === myName;
});
console.log(hits);
答案 1 :(得分:0)
强制使用此库答案。我在这里使用lodash:
var text = ["Heather", "kfdjsalfjdai", "fdjafhjdksafh", "Heather", "Heather", "something"],
myName = "Heather";
var hits = _.filter(text, _.matches([myName]);
解释发生了什么,因为这根本不直观。 _.filter与Array.prototype.filter
做同样的事情,除了它更快。您可以在下面运行自己的测试以获得一个想法:
https://jsperf.com/array-filter-vs-lodash-filter-without-bias/2
我听到的解释是,由lodash(map,reduce,filter等)实现的传统阵列操作不必遵循规范详述的实现。
无论如何,_.filter
有两个参数:一个集合(数组或对象)和返回true或false的函数。如果为true,则返回该项目。
_.matches
是一个便利函数,它返回一个函数,该函数接受一个参数并匹配所提供集合的内容。
你可以用另一种方式写上面的内容:
var hits = _.filter(text, function(str) {
return str === myName
});
在lodash中,我们始终创建基本上执行相等性检查的函数。 _.matches
只是创建等式检查功能的便利功能。
答案 2 :(得分:-1)
检查myName
变量。
var text = ["Heather", "kfdjsalfjdai", "fdjafhjdksafh", "Heather", "Heather",
"fsomething"];
var myName = "Heather";
var hits = [];
for(var i = 0; i < text.length; i++) {
if (text[i] === myName) {
hits.push(text[i]);
}
}
console.log(hits);
Here是一个工作样本
答案 3 :(得分:-1)
text[i]
永远不会=== myName[i]
,因为text
是一个字符串数组,而myName
只是一个字符串。例如,text[1] === "Heather"
,而myName[1] === "H"
。任何myName
索引都只返回一个字符。