Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历对象中的多个值_Javascript_Jquery_Loops_Object - Fatal编程技术网

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(''));