在Javascript中对对象属性执行字符串方法
Performing String Methods on Object Properties in Javascript
每当我试图对包含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",然后只收集这些属性以供进一步操作。我在这里错过了什么?
prop
已经是一个字符串。你只需要这个:
for (prop in arrOfEntries) {
if (arrOfEntries.hasOwnProperty(prop) && prop.indexOf("name") !== -1) {
result += arrOfEntries[prop];
}
}
我添加了hasOwnProperty
,这样您就不会错误地尝试添加Object
类型上已经存在的方法。
仅供参考:arrOfEntries
是一个对象(带有字符串/值键),而不是一个数组——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) {
if (prop.indexOf('name') != -1)
{
alert(arrOfEntries[prop]);
}
}
Greetz
您有几个问题:
您试图通过使用
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 }
使用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"
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- 如何在javasciipt中添加单引号到字符串,该字符串将在nodeJS中作为mysql插入命令执行
- 将字符串作为一段 HTML/javascript 代码执行
- 当JavaScript函数的名称在函数中作为字符串传递时,如何执行该函数
- eval和setTimeout之间的差异执行字符串代码
- 试图执行JSON.parse,但它不喜欢我使用服务器返回的字符串所做的操作
- 在特定的HTML元素中注入并执行JavaScript字符串
- Jquery:在Jquery的(字符串)变量中执行Jquery脚本
- 在Javascript中对对象属性执行字符串方法
- 如何从字符串执行 JS 语句
- nodejs执行字符串变量
- 如何在for()语句中执行字符串函数
- GulpJS:对SVG文件内容执行字符串函数
- 在JS中从php文件执行字符串,setTimeout vs eval()
- 我如何使用Javascript执行字符串分割和访问数组的值
- 在没有Eval的Javascript中执行字符串
- 如何在angular js指令中执行字符串
- 在没有eval的情况下执行字符串,或者在这里使用eval
- 如何在提交之前在表单中执行字符串拆分
- 在从CFC返回结果之前,对AJAX查询执行字符串函数