每当我尝试对包含Javascript中对象属性值的变量执行字符串操作时,我得到一个错误,关于解释器无法找到我试图用于该对象的方法:
var arrOfEntries = {};
arrOfEntries["name1"] = "Jane" ;
arrOfEntries["age1"] = "40" ;
arrOfEntries["name2"] = "Kathy" ;
arrOfEntries["age2"] = "35" ;
arrOfEntries["name3"] = "Mary" ;
arrOfEntries["age3"] = "23" ;
arrOfEntries["name4"] = "Donna" ;
arrOfEntries["age4"] = "32" ;
var result = ' ';
for (prop in arrOfEntries) {
var tempVar = String(prop) /*/this line was added as an attempt to force the property into the type String, but does not work*
if (tempVar.includes("name"))
result += tempVar
}
在这种情况下,我只想检查该对象的每个属性的名称中是否存在字符串“name”,然后仅收集这些属性以进行进一步的操作。我在这里缺少什么?
答案 0 :(得分:3)
prop
已经是一个字符串。你应该只需要这个:
for (prop in arrOfEntries) {
if (arrOfEntries.hasOwnProperty(prop) && prop.indexOf("name") !== -1) {
result += arrOfEntries[prop];
}
}
我添加了hasOwnProperty
,因此您不会错误地尝试添加Object
类型中已存在的方法。
同样只是FYI:arrOfEntries
是一个对象(带有字符串/值键),而不是数组 - 在JavaScript类型中有一些区别。
答案 1 :(得分:0)
使用largerString.indexOf("substring")
,因为includes()
没有广泛的浏览器支持。
indexOf()
方法会告诉您substring
内largerString
的第一个匹配项的起始位置(整数)。如果未找到匹配项,则返回-1
见下文:
var arrOfEntries = {};
arrOfEntries["name1"] = "Jane" ;
arrOfEntries["age1"] = "40" ;
arrOfEntries["name2"] = "Kathy" ;
arrOfEntries["age2"] = "35" ;
arrOfEntries["name3"] = "Mary" ;
arrOfEntries["age3"] = "23" ;
arrOfEntries["name4"] = "Donna" ;
arrOfEntries["age4"] = "32" ;
var result = ' ';
for (prop in arrOfEntries) {
if (prop.indexOf("name") >= 0) {
result += prop
}
}
如果您执行console.log(result)
,您将获得"name1name2name3name4"
答案 2 :(得分:0)
这样做:
var arrOfEntries = {};
arrOfEntries["name1"] = "Jane" ; arrOfEntries["age1"] = "40" ;
arrOfEntries["name2"] = "Kathy" ; arrOfEntries["age2"] = "35" ;
arrOfEntries["name3"] = "Mary" ; arrOfEntries["age3"] = "23" ;
arrOfEntries["name4"] = "Donna" ; arrOfEntries["age4"] = "32" ;
var result = ' ';
for (prop in arrOfEntries) {
if (prop.indexOf('name') != -1)
{
alert(arrOfEntries[prop]);
}
}
格尔茨
答案 3 :(得分:0)
您有几个问题:
您尝试使用var tempVar = String(prop)
强制将值强制转换为字符串,因为您遗漏了new
运算符,因此无法正常工作。它应该是var tempVar = new String(prop);
。你可以忽略它,因为它不需要它。
String.prototype.includes
是在ES6中引入的,目前还没有广泛的浏览器支持。有关详细信息,请查看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes处的文档。
考虑到对includes
缺乏支持,您可以使用indexOf
作为替代:if (prop.indexOf('name') >= 0) { // 'name' is included }