JavaScript - 使用数组检查字符串

时间:2015-12-08 16:10:43

标签: javascript arrays string

这段代码应该返回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]);
        }
    }
}

4 个答案:

答案 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索引都只返回一个字符。