Javascript 从数组文字中检索属性值
我一直被如何从数组文本中正确检索属性值所困扰 对象文字:Javascript 从数组文字中检索属性值,javascript,arrays,object,Javascript,Arrays,Object,我一直被如何从数组文本中正确检索属性值所困扰 对象文字: var obj = { "p1": "v1", "p2": "v2", "p3": "v3" }; for (var key in obj) { if (obj.hasOwnProperty(key)) { console.log(key + " -> " + obj[key]); } } var obj = [ { "pa":"va1", "pb":"vb1" }
var obj = {
"p1": "v1",
"p2": "v2",
"p3": "v3"
};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " -> " + obj[key]);
}
}
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]);
}
}
控制台日志输出:
数组文字:
var obj = {
"p1": "v1",
"p2": "v2",
"p3": "v3"
};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + " -> " + obj[key]);
}
}
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]);
}
}
控制台日志输出(duh!):
我要做的:检查字符串是否与pa
值之一匹配。如果有,做点什么
这就是逻辑:
var myString = "a value I'm getting from somewhere else ;)"
if (myString == any of the pa values) {
// do something
}
感谢您的帮助
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]);
}
}
}
vari,键;
对于(i=0;i”+obj[i][key]);
}
}
}
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]);
}
}
}
vari,键;
对于(i=0;i”+obj[i][key]);
}
}
}
使用方法(链接包含向旧浏览器(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
}
使用该方法(链接包含向旧浏览器(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
}
如果您不需要知道父对象,不循环所有对象(取决于数组和对象大小)可能会提高性能。如果添加了其他嵌套级别的对象,这也将消除更改代码的需要
JSON.stringify(obj).indexOf(':"pa1"')>-1
将数组转换为如下所示的字符串:
"[{"pa":"va1","pb":"vb1"},{"pa":"va2","pb":"vb2"},{"pa":"va3","pb":"vb3"},{"pa":"va4","pb":"vb4"}]"
我们当然可以通过它进行正常的文本搜索
IE8及以上版本支持JSON.stringify()。如果您不需要知道父对象,可能会提高性能,因为它不会在所有对象之间循环(取决于数组和对象大小)。如果添加了其他嵌套级别的对象,这也将消除更改代码的需要
JSON.stringify(obj).indexOf(':"pa1"')>-1
将数组转换为如下所示的字符串:
"[{"pa":"va1","pb":"vb1"},{"pa":"va2","pb":"vb2"},{"pa":"va3","pb":"vb3"},{"pa":"va4","pb":"vb4"}]"
我们当然可以通过它进行正常的文本搜索
IE8及以上版本支持JSON.stringify()这可能过于简单,但如果您只想知道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');
}
无需循环,尽管您的数组设置必须更改以支持这种“查找”方法。这可能过于简单,但如果您只想知道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');
}
无需循环,但您的阵列设置必须更改以支持这种“查找”方法。您需要另一个
用于obj[key]上的循环
object.
数组中的项目是object
s。你的问题答案正确。可能是@Mathletics的重复项是的,这就是我以前没有问过的事实。我很高兴我问了,因为现在我更清楚地知道你需要另一个来在obj[key]上进行循环
object.
数组中的项是object
s。你的问题答案正确。可能是@Mathletics的重复项是的,这就是我以前不想问的事实。我很高兴我问了,因为现在我知道betterFilter可能是做他想做的事情的最佳方式,但请确保你已经完成了如果你想支持IE8及以下版本,请点击这里。很好!这不需要IE支持。Filter可能是做他想做的事情的最佳方式,但如果你想支持IE8及以下版本,请确保你已经填充了它。很好!这不需要IE支持。+1'点击这个按钮,因为它显示了如何让控制台日志输出类似于t的内容第一个:beer:+1'ing这一个,因为它展示了如何让控制台日志输出与第一个类似的东西:beer:谢谢你花了这么多时间在这里,但我不明白为什么你要反转“val1:”pa“
。属性在值之前……而且你的示例只是一个简单的对象文本,而不是数组(这是问题的一部分)。但为这一贡献干杯!不客气。反转实际上解决了在数组头部的对象上查找值的问题。上面的pa可以是一个对象本身,这里我只有一个字符串。通过这种方式创建数组,您可以创建一个对象索引列表,这样您就可以通过引用按名称查找对象。I在我的示例中,我只是想解决“它是否存在”的问题,但你可以更有力地使用它。有趣的是,我稍后会重新讨论你的方法。干杯!谢谢你花了这么多时间,但我不明白你为什么要反转”val1:“pa”
。属性在值之前…此外,您的示例只是一个简单的对象文本,而不是数组(这是问题的一部分)。但为这一贡献干杯!不客气。反转实际上解决了在数组头部的对象上查找值的问题。上面的pa可以是一个对象本身,这里我只有一个字符串。通过这种方式创建数组,您可以创建一个对象索引列表,这样您就可以通过引用按名称查找对象