gpt4 book ai didi

Javascript 对象键只有在 console.log 展开后才能解析

转载 作者:行者123 更新时间:2023-11-27 23:57:15 25 4
gpt4 key购买 nike

我遇到了与 this stackoverflow question 相同的问题。虽然这个问题得到了回答,但没有提供解决方案。

我有一个 javascript 对象,其中 console.log(anObject) 显示所有键,但 console.log(JSON.stringify(anObject)) 不会显示所有键,它只显示 2 个键中的 1 个。

在 javascript(不是控制台)级别造成此问题的原因是什么?如何解决此问题,以便该段后面的代码可以访问所有键?

有没有办法强制对象解析?

提前致谢。

<小时/>

它被包装在异步的 getJson 中,但讽刺的是,被遗漏的数据不是 json 结果数据。我正在使用 cytoscape.js 库。问题发生在本节中 cytoscape.js 文件的第 5183 行附近,它正在解析我的 xar(元素数组),如下所示。数据 key 存在,但组 key 不存在,除非在控制台中展开。

      // specify via opts.nodes and opts.edges
else if( $$.is.plainObject(opts) && ($$.is.array(opts.nodes) || $$.is.array(opts.edges)) ){
var elesByGroup = opts;
var jsons = [];

var grs = ['nodes', 'edges'];
for( var i = 0, il = grs.length; i < il; i++ ){
var group = grs[i];
var elesArray = elesByGroup[group];

if( $$.is.array(elesArray) ){

for( var j = 0, jl = elesArray.length; j < jl; j++ ){
//console.log(JSON.stringify(elesArray[j]))
if ( typeof elesArray[j] !== "undefined" ) {
var json = elesArray[j];
console.log(elesArray[j].data)
json.group = group;
jsons.push( json );
}
}
}
}
<小时/>
 $(document).ready(function() {

function notInArray(value, array) {
return array.indexOf(value) == -1;
}

var node_array = new Array();
var edge_array = new Array();

var full_data;

var xar = new Object();

xar.nodes = [];
xar.edges = [];

$.getJSON("http://127.0.0.1/loctest", function(xad) {
full_data = xad;
var i = 0;
$.each(xad, function(key, val) {
s = val.src;
d = val.dst;
if (notInArray(s, node_array)) {
node_array.push(s);
xar.nodes[i] = {
data: {
id: s
}
};
i++;
}
if (notInArray(d, node_array)) {
node_array.push(d);
xar.nodes[i] = {
data: {
id: d
}
};
}
xar.edges[i] = {
data: {
id: i.toString(),
weight: 3,
source: s,
target: d
}
};
i++;
});

//console.log(xar);
$('#cy').cytoscape({
//container: document.getElementById('cy'),

style: cytoscape.stylesheet()
.selector('node')
.css({
'content': 'data(id)'
})
.selector('edge')
.css({
'target-arrow-shape': 'triangle',
'width': 4,
'line-color': '#ddd',
'target-arrow-color': '#ddd'
})
.selector('.highlighted')
.css({
'background-color': '#61bffc',
'line-color': '#61bffc',
'target-arrow-color': '#61bffc',
'transition-property': 'background-color, line-color, target-arrow-color',
'transition-duration': '0.5s'
}),

elements: xar,

layout: {
name: 'breadthfirst',
directed: true,
roots: '#a',
padding: 10
}
});


console.log(cy);
var bfs = cy.elements().bfs('#a', function() {}, true);

var p = 0;
var highlightNextEle = function() {
bfs.path[p].addClass('highlighted');

if (p < bfs.path.length) {
p++;
setTimeout(highlightNextEle, 1000);
}
};

// kick off first highlight
highlightNextEle();

});

});

最佳答案

JSON.stringify 仅列出可枚举的自身属性。

这在15.12.3中有解释。 :

The abstract operation JO(value) serializes an object.

Let K be an internal List of Strings consisting of the names of all the own properties of value whose [[Enumerable]] attribute is true. The ordering of the Strings should be the same as that used by the Object.keys standard built-in function.

因此,如果您没有看到该属性,则可能意味着

  • 该属性尚未添加。注意 console.log 可能是异步的,因此该属性可能会在调用 log 之后添加,但会显示在控制台中
  • 该属性(property)是继承的,而不是自己的
  • 该属性不可枚举

关于Javascript 对象键只有在 console.log 展开后才能解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com