Javascript 循环遍历对象中的多个值
我想做的很简单。我有这个:Javascript 循环遍历对象中的多个值,javascript,jquery,loops,object,Javascript,Jquery,Loops,Object,我想做的很简单。我有这个: var loopTest = { Test1: { date : ['November 2011', 'a new date'] }, Test2: { date : 'January 2012' } }; 使用for…,就像这样: for(var key in loopTest) { $('.content').ap
var loopTest = {
Test1: {
date : ['November 2011', 'a new date']
},
Test2: {
date : 'January 2012'
}
};
使用for…,就像这样:
for(var key in loopTest) {
$('.content').append('- '+loopTest[key].date+'<br />');
}
for(循环测试中的变量键){
$('.content').append('-'+loopTest[key].date+'
');
}
我想让Test1.date
值显示为单独的元素。目前,它们是一个字符串。我该怎么办
这里有一把小提琴:使用$.isArray()
测试loopTest[key].date
是否为数组。如果是,用一些
和连字符将里面的日期连接起来。否则,按原样追加字符串
for(var key in loopTest) {
if($.isArray(loopTest[key].date)){
var content = '- ' + loopTest[key].date.join('<br />- ') + '<br />';
} else {
var content = '- ' + loopTest[key].date + '<br />';
}
$('.content').append(content);
}
for(循环测试中的变量键){
if($.isArray(loopTest[key].date)){
var content='-'+loopTest[key].date.join('
-')+'
';
}否则{
var content='-'+loopTest[key].date+'
;
}
$('.content')。追加(content);
}
这只是你可以采取的众多方法之一
检查日期是否为数组,并在其中循环:
for (var key in loopTest) {
if(Object.prototype.toString.call(loopTest[key].date) === '[object Array]') {
for (var i = 0; i < loopTest[key].date.length; i++) {
$('.content').append('- ' + loopTest[key].date[i] + '<br />');
}
} else {
$('.content').append('- ' + loopTest[key].date + '<br />');
}
}
for(循环测试中的变量键){
if(Object.prototype.toString.call(loopTest[key].date)=='[Object Array]'){
对于(var i=0;i ');
}
}否则{
$('.content').append('-'+loopTest[key].date+'
');
}
}
保持简短甜美
for (var key in loopTest) {
[].concat(loopTest[key].date).forEach(function(date) {
$('.content').append('- ' + date + '<br />');
});
}
for(循环测试中的变量键){
[].concat(loopTest[key].date).forEach(函数(日期){
$('.content').append('-'+date+'
');
});
}
for(循环测试中的var键){
var date=loopTest[key]。日期;
date=date.join?date.join(“
-”):日期
$('.content').append('-'+date+'
');
}
另一种解决方案:)
var-store=[];
for(循环测试中的var键){
如果(!loopTest.hasOwnProperty(key))继续;
var date=loopTest[key][“date”];
if(date.constructor==数组){
对于(var j输入日期){
如果(!date.hasOwnProperty(j))继续;
store.push(“-”,日期[j],“”);
}
}否则{
store.push(“-”,日期“”);
}
}
$('.content').append(store.join('');
@Moogs这是为了简化答案。有这么多好的答案,但你的答案又好又短。非常感谢。友好的IE9及以上版本仅警告。@labroo感谢您的指导up@stinkysGTI如果您必须支持IE8及以下版本,请使用$。每个都使用此方法,如何仅针对一个对象?例如,如果我只想使用Test1
中的数据,那么您的代码就太长了。你可以缩短<代码>存储推送(“”,日期[j],“”)代码>很长,但很有趣很好的建议。我想要的是线程中最长的答案:P
for(var key in loopTest) {
var date = loopTest[key].date;
date = date.join ? date.join("<br>- ") : date
$('.content').append('- ' + date + '<br />');
}
var store = [];
for (var key in loopTest) {
if (!loopTest.hasOwnProperty(key)) continue;
var date = loopTest[key]["date"];
if (date.constructor === Array) {
for (var j in date) {
if (!date.hasOwnProperty(j)) continue;
store.push('<p>-', date[j], '</p>');
}
} else {
store.push('<p>-', date, '</p>');
}
}
$('.content').append(store.join(''));