我一直不知道如何从数组文字中正确检索属性值。
对象文字:
var obj = {
"p1": "v1",
"p2": "v2",
"p3": "v3"
};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " -> " + obj[key]);
}
}
控制台日志输出:
p1 -> v1
p2 -> v2
p3 -> v3
数组文字:
var obj = [
{ "pa":"va1", "pb":"vb1" },
{ "pa":"va2", "pb":"vb2" },
{ "pa":"va3", "pb":"vb3" },
{ "pa":"va4", "pb":"vb4" }
];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " -> " + obj[key]);
}
}
控制台日志输出(呃!):
0 -> [object Object]
1 -> [object Object]
2 -> [object Object]
3 -> [object Object]
我正在尝试做什么: 检查字符串是否与pa
值之一匹配。如果是,请做点什么。
这就是逻辑:
var myString = "a value I'm getting from somewhere else ;)"
if (myString == any of the pa values) {
// do something
}
任何帮助表示赞赏!
答案 0 :(得分:4)
使用filter
方法(链接包含代码以向旧浏览器添加功能 - IE8及更早版本),然后检查结果数组的长度:
var obj = [
{ "pa":"va1", "pb":"vb1" },
{ "pa":"va2", "pb":"vb2" },
{ "pa":"va3", "pb":"vb3" },
{ "pa":"va4", "pb":"vb4" }
];
var filtered = obj.filter(function(element) {
return element.pa === myString;
});
if (filtered.length > 0) {
// contains string
}
答案 1 :(得分:2)
obj
不是您期望的对象,它是一个对象数组。您需要迭代数组,然后迭代每个数组项中的键。
var i, key;
for (i = 0; i < obj.length; i++) {
for (key in obj[i]) {
if (obj[i].hasOwnProperty(key) {
console.log(key + " -> " + obj[i][key]);
}
}
}
答案 2 :(得分:0)
如果您不需要知道父级,那么可能可以提升性能,而不是循环使用它(取决于数组和对象大小)。如果添加了另一个嵌套级别的对象,这也将消除更改代码的需要。
JSON.stringify(obj).indexOf(':"pa1"')>-1
JSON.stringify()
将您的数组转换为如下字符串:
"[{"pa":"va1","pb":"vb1"},{"pa":"va2","pb":"vb2"},{"pa":"va3","pb":"vb3"},{"pa":"va4","pb":"vb4"}]"
我们当然可以通过
进行正常的文本搜索IE8及以上版本支持JSON.stringify()
答案 3 :(得分:0)
这可能过于简单了,但如果您只是想知道mystring中是否有一个字符串是数组中的项目,那么该数组可以通过字符串索引进行寻址。
更新 - 我通过firebug运行此操作,发现我的符号不正确,因为此方法按照我认为应该的方式工作 - 即作为标签对象或值的可参考列表。
var obj = [];
obj["val1"] = "pa";
obj["val2"] = "pb";
mystring="val1";
if (obj[mystring]){
alert ('object exists in array');
}
else{
alert('object with index ' + mystring + ' does not exist');
}
不需要循环,但必须更改阵列设置以支持这种“查找”方法。