【问题标题】:Javascript Searching Array for partial stringJavascript搜索数组的部分字符串
【发布时间】:2016-07-23 03:59:37
【问题描述】:

有一个返回对象数组的函数。该数组有一个带有名称字段的速率对象。名称字段中包含“慢速”和“快速”等名称。

我编写了以下内容,希望创建一个新数组,该数组将过滤掉数组值,只返回与rates[i].name 匹配的“Slow”值。

到目前为止,我在开发控制台中遇到了这个错误。 “未捕获的 TypeError:value.substring 不是函数”

var rates = myArray();
var index, value, result;
var newArr = [];

for (index = 0; index < rates.length; ++index) {
    //value = rates[index];
    if (value.substring(0, 5) === "Stand") {
        result = value;
        newArr.push();
        break;
    }
}

部分数组返回控制台。

"rates":[{"id":1123,"price":"1.99","name":"Slow speed - Red Car","policy":{"durqty":1,"durtype":"D","spdup":15000,"spddwn":15000}

【问题讨论】:

标签: javascript arrays


【解决方案1】:

你在每个数组位置都有一个对象,而不是字符串本身,试试这个:

var rates = myArray();
var index, value, result;
var newArr = [];

for (index = 0; index < rates.length; ++index) {
    name = rates[index].name;
    if (name.substring(0, 4) === "Slow") {
        newArr.push(rates[index]);
    }
}

尝试使用filter这样的函数,看起来更干净

var newArr = rates.filter(function(rate){
  return rate.name && rate.name.substring(0,4) === "Slow";
});

【讨论】:

  • 前 4 个字符在 substring(0, 4)
  • 你给name赋值,然后检查value.substring,同样当substring(0,5)返回带有空格的单词"Slow "所以它不会匹配"Slow"
  • 是的,你是对的,我的错。正在编辑他的代码,没有注意。谢谢,已编辑
【解决方案2】:

您可以使用filter 来执行此操作,例如:

var newArr = rates.filter(function(val){
    // check if this object has a property `name` and this property's value starts with `Slow`.
    return val.name && val.name.indexOf("Slow") == 0; 
});

正如@4castle 提到的,您可以使用slice(...) 而不是indexOf(...),这可能更有效,例如:val.name.slice(0,4) == "Slow"

【讨论】:

  • indexOf 将查看整个字符串。如果他们只想查看前 4 个字符,他们应该使用 slice(0, 4) === "Slow"
猜你喜欢
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多