[英]how to loop through an array with nested objects using jquery?
如果我有这样的数组:
var msg = [ {name: ["a1", "a2"], value: "this is A"},
{name: ["b1", "b2"], value: "this is B"},
...
]
该数组包含用于客户端表单验证的全局错误消息。 我设法传递了错误的输入(例如“ a1”),现在想知道如何从构造错误的数组中获取相应的消息。
题
遍历此数组的最佳方法是什么? 例如,如果我将“ a1”作为参数传递到函数中,如何提取“ this is A”作为相应的消息?
inArray并没有真正的帮助,因为我需要相应的消息,而不是a1的位置。 我也不确定这是否是存储我的错误消息的最佳方法……欢迎提出建议!
感谢帮助!
重新排列您的数据结构:
var my_param = 'b1';
// This is an object, so we can have key/value pairs
var error_codes =
{
'a1': 0,
'a2': 0,
'b1': 1,
'b2': 1
};
// This is an array because we only need values
var error_messages =
[
'This is A',
'This is b'
];
alert(error_messages[error_codes[my_param]]);
这使得设置新的错误代码和消息确实非常容易,并且非常容易理解。 唯一的问题是error_codes[my_param]
-它是一个对象,但我们无法执行error_codes.my_param
因为它会查找名为“ my_param”的元素,因此使用数组符号可以查找对象键。
唯一的其他潜在陷阱是确保您没有任何结尾的逗号:
var error_codes = { 'a1': 1, }; // NO!
这就是我会做的
var myMsg = findMsg('a1')
function findMsg(msgType){
msg.forEach(function(obj){
if(inArray(msgType, obj.name) !== -1){
return obj.value
}
})
}
function inArray(key, obj){
return obj.join().indexOf(key)
}
$.each
是对数组的每个元素或对象的每个可枚举属性执行操作的jQuery方法。
var value;
$.each(msg, function (i, el) {
if (el.name.indexOf(name) >= 0) {
value = el.value;
return false; // Stops iteration.
}
});
如果name
为"a1"
则运行上述命令后, value === "this is A"
。
简单又好:
var getMessage = function (name)
{
var msg = [ ... ];
for(var i = 0; i < msg.length; ++ i)
if (msg [i].name.indexOf (name) != -1)
return msg [i].value;
}
如果找不到名称,则返回相应的消息或undefined
。
您可能需要indexOf
的填充程序,具体取决于要支持的浏览器:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.