如何在JavaScript中打印对象数组?


70

我已经在JavaScript中创建了一个对象数组。如何在浏览器窗口中打印对象数组,类似于print_rPHP中的函数?

var lineChartData = [{
            date: new Date(2009, 10, 2),
            value: 5
        }, {
            date: new Date(2009, 10, 25),
            value: 30
        }, {
            date: new Date(2009, 10, 26),
            value: 72,
            customBullet: "images/redstar.png"
        }];

11
用于console.log(lineChartData)将其记录到控制台。
罗布

2
您可以用来console.debug(lineChartData)在控制台中查看对象。(在firefox中:工具-> Web开发人员-> Web控制台(或Ctrl + Shift + K)-或下载Firebug
Adam Tomat 2013年

Answers:


126

只需stringify将您的对象分配给您选择的元素的innerHTML

yourContainer.innerHTML = JSON.stringify(lineChartData);

如果您想要更漂亮的东西,

yourContainer.innerHTML = JSON.stringify(lineChartData, null, 4);

var lineChartData = [{
            date: new Date(2009, 10, 2),
            value: 5
        }, {
            date: new Date(2009, 10, 25),
            value: 30
        }, {
            date: new Date(2009, 10, 26),
            value: 72,
            customBullet: "images/redstar.png"
        }];

document.getElementById("whereToPrint").innerHTML = JSON.stringify(lineChartData, null, 4);
<pre id="whereToPrint"></pre>

但是,如果只是为了调试而执行此操作,则最好将控制台与配合使用console.log(lineChartData)



15

如果您使用的是Chrome,也可以使用

console.log( yourArray );

我需要在更大的字符串中包含格式化的数组:这似乎不适用于该..?
StephenBoesch

7

php.js中有一个很棒print_r的JavaScript实现库中。

注意,您还应该添加 echo在代码中支持。

演示: http : //jsbin.com/esexiw/1


13
严重的console是,这是比主浏览器窗口更好的调试信息的地方。
SDC

@SDC好吧,我承认这是事实,有时你做一个HTTP请求,其超过100点或更多的对象,它并没有什么意义单击箭头,然后打开所有这些,看看有什么对象数组的内部回报
DrewT

3

简单的功能,用于警告对象或数组的内容。
使用数组或字符串或对象来警告该内容,以调用此函数。

功能

function print_r(printthis, returnoutput) {
    var output = '';

    if($.isArray(printthis) || typeof(printthis) == 'object') {
        for(var i in printthis) {
            output += i + ' : ' + print_r(printthis[i], true) + '\n';
        }
    }else {
        output += printthis;
    }
    if(returnoutput && returnoutput == true) {
        return output;
    }else {
        alert(output);
    }
}

用法

var data = [1, 2, 3, 4];
print_r(data);

1
document.getElementById('container').innerHTML = lineChartData[array_index]

0

我使用以下功能在firefox控制台日志中显示读数:

////        make printable string for console readout, recursively
var make_printable_object = function(ar_use)
{
////        internal arguments
var in_tab = arguments[1];
var st_return = arguments[2];
////        default vales when applicable
if (!in_tab) in_tab = 0;
if (!st_return) st_return = "";
////        add depth
var st_tab = "";
for (var i=0; i < in_tab; i++) st_tab = st_tab+"-~-~-";

////        traverse given depth and build string
for (var key in ar_use)
{
    ////        gather return type
    var st_returnType = typeof ar_use[key];
    ////        get current depth display
    var st_returnPrime = st_tab+ "["+key+"] ->"+ar_use[key]+"< is {"+st_returnType+"}";
    ////        remove linefeeds to avoid printout confusion
    st_returnPrime = st_returnPrime.replace(/(\r\n|\n|\r)/gm,"");
    ////        add line feed
    st_return = st_return+st_returnPrime+"\n";
    ////         stop at a depth of 15
    if (in_tab>15) return st_return;
    ////        if current value is an object call this function
    if ( (typeof ar_use[key] == "object") & (ar_use[key] != "null") & (ar_use[key] != null) ) st_return = make_printable_object(ar_use[key], in_tab+1, st_return);


}

////        return complete output
return st_return;

};

例:

console.log( make_printable_object( some_object ) );

或者,您可以替换为:

st_return = st_return+st_returnPrime+"\n";

st_return = st_return+st_returnPrime+"<br/>";

在html页面中打印出来。


0

您只需使用以下语法,该对象就会在控制台中完全显示:

console.log('object evt: %O', object);

我使用的是Chrome浏览器,不知道这是否适用于其他浏览器。


0

恩...为什么不使用这样的东西?

function displayArrayObjects(arrayObjects) {
        var len = arrayObjects.length, text = "";

        for (var i = 0; i < len; i++) {
            var myObject = arrayObjects[i];
            
            for (var x in myObject) {
                text += ( x + ": " + myObject[x] + " ");
            }
            text += "<br/>";
        }

        document.getElementById("message").innerHTML = text;
    }
            
            
            var lineChartData = [{
                date: new Date(2009, 10, 2),
                value: 5
            }, {
                date: new Date(2009, 10, 25),
                value: 30
            }, {
                date: new Date(2009, 10, 26),
                value: 72,
                customBullet: "images/redstar.png"
            }];

            displayArrayObjects(lineChartData);
<h4 id="message"></h4>

结果:

date: Mon Nov 02 2009 00:00:00 GMT+0200 (FLE Standard Time) value: 5 
date: Wed Nov 25 2009 00:00:00 GMT+0200 (FLE Standard Time) value: 30 
date: Thu Nov 26 2009 00:00:00 GMT+0200 (FLE Standard Time) value: 72 customBullet: images/redstar.png 

jsfiddle


0

您可以console.log()用来打印对象

console.log(my_object_array);

如果您有大对象并想要打印其某些值,则可以使用此自定义函数在控制台中打印数组

this.print = function (data,bpoint=0) {
    var c = 0;
    for(var k=0; k<data.length; k++){
        c++;
        console.log(c+'  '+data[k]);
        if(k!=0 && bpoint === k)break;  
    }
}

用法

print(array);   // to print entire obj array

要么

print(array,50);  // 50 value to print only 

-1

不确定子元素,但是所有浏览器现在都应支持以下子元素:

for (val of lineChartData) {
  document.write(val);
}

这可能会给您一些想法在JavaScript数组中实现每个?


document.write没有上下文推荐是一个非常糟糕的主意,因为它正在写入流,这将破坏关闭的文档(完全加载的页面)。该for ... of循环是一个不错的主意,但。请提供更多背景信息或更改document.write
Christoph

@Christoph您可以自由扩展和进行编辑。渐进式渲染和DOM操作的细微差别,在YouTube上有很多有关该视频的精彩视频,但这已经成为话题。我发现document.write通常比console.log更快,更方便进行快速测试,并且占用的屏幕空间更少,但这取决于您要构建的内容以及您的个人喜好。
PJ Brunet '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.