2016-07-23 60 views
1

有一個返回對象數組的函數。該數組具有包含名稱字段的費率對象。在名稱字段內有諸如「慢速」和「快速」之類的名稱。JavaScript搜索部分字符串的數組

我寫了以下內容,希望能夠創建一個新的數組,它將過濾掉數組值,只返回那些與速度[i] .name匹配的「Slow」的數組。

到目前爲止,我在我的開發控制檯遇到此錯誤。 「遺漏的類型錯誤: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} 
+0

[在JavaScript中,你如何尋找一個數組的字符串匹配(HTTP的可能重複:// stackarflow.com/questions/4556099/in-javascript-how-do-you-search-an-array-for-a-substring-match) – Rachmaninoff

+2

值是arrray特定索引處的對象。您可能需要執行'value.name' –

+0

也需要使用'newArr.push(result);' – moped

回答

3

你必須在每個陣列位置的對象不是字符串本身,試試這個:

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"; 
}); 
+1

前4個字符位於'name'的substring(0,4)' – 4castle

+0

下,然後檢查'value.substring',當substring(0,5)'返回帶空格的單詞''「時慢「'所以它不會匹配'」慢「# – moped

+0

是的,你是對的,我的壞。正在編輯他的代碼,沒有注意。謝謝,編輯 – sasidhar

1

您可以使用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提到的,而不是indexOf(...)可以使用slice(...)這可能是比較有效,如:val.name.slice(0,4) == "Slow"

+1

'indexOf'將查看整個字符串。如果他們只想查看前4個字符,他們應該使用'slice(0,4)===「Slow」' – 4castle