Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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_Arrays_Json_Object_Google Chrome Extension - Fatal编程技术网

Javascript 如何读取包含对象数组的对象?

Javascript 如何读取包含对象数组的对象?,javascript,arrays,json,object,google-chrome-extension,Javascript,Arrays,Json,Object,Google Chrome Extension,我有一个包含对象数组的对象。我能够将这些数据保存到chrome.storage中。还可以将数据作为对象返回。但我完全被困在如何从中解读 比如说,我有以下数据: var x = {'data': [{name: '', id: '', url: '', 'dataquery': [{name: '', url: '', lookfor: '', getback: ''}] }] }; 现在,我将其保存到chrome存储中(使用set),然后将该数据作为对象“d”(使用get)返回,我如何访问,

我有一个包含对象数组的对象。我能够将这些数据保存到chrome.storage中。还可以将数据作为对象返回。但我完全被困在如何从中解读

比如说,我有以下数据:

var x = {'data': [{name: '', id: '', url: '', 
'dataquery': [{name: '', url: '', lookfor: '', getback: ''}] }] };
现在,我将其保存到chrome存储中(使用set),然后将该数据作为对象“d”(使用get)返回,我如何访问,比如说第一个数组的id或url?不应该是这样吗:

d.data[0].url // ??
chrome.storage.sync.get('YOUR_NAME_HERE', function(d) {
  console.log(d);
}
但这是一个错误。我做错了什么?正确的语法是什么

编辑,包含更多详细信息:以下是我用来设置和获取数据的代码:

// SETTING THE DATA
chrome.storage.sync.set(x, function() {
console.log('STORED'); });

// GETTING THE DATA
var d;
chrome.storage.sync.get('data', function(data) {
    d = data;
    console.log(d);
});

alert(d.data[0].loginurl);
我可以从控制台日志中看到数据已正确存储和检索。我可以在console.log中看到数据(作为对象)(展开时显示数组和所有元素)

但警告行给出了以下错误:
'Uncaught TypeError:无法读取未定义'

的属性'data'。您能给我们一个相关代码的摘录吗

我猜你应该这样读:

d.data[0].url // ??
chrome.storage.sync.get('YOUR_NAME_HERE', function(d) {
  console.log(d);
}

你会看到你得到了什么回报。

我知道了。这是一个简单的错误,在外部声明变量“d”,使其成为全局变量。但是没有初始化它

var d; // <- Forgot to initialize the variable
chrome.storage.sync.get('data', function(data) {
    d = data;
    console.log(d);
});

alert(d.data[0].loginurl);

var d;//这是正确的语法。。。会给你想要的。您需要展示如何获得
d
(可能还有更多)。我的猜测是,你有一个好的副本,用我如何设置和获取数据的代码编辑这个问题。但是,我可以看到我的数据已经从console.log中正确存储了。所以我想我的语法是正确的,但是我需要将从存储中得到的对象转换成其他格式。我尝试了stringify,但它返回“undefined”(当我尝试在页面或console.log上发布“stringify”输出时)…在我所做的中似乎有一个答案。。它已经正确地存储了数据。。我可以在console.log中将我的数据视为一个对象。是否发布该输出?它显示在console日志中:>object:{data:Array[1]},当您单击它展开时,它会显示其中的所有数据以及所有节点。。让我看看如何发布更多关于这个的信息。你仍然会有同样的问题。
get
函数是异步的。您不能假设当您到达最后一行代码时,它已经完成了。事实上,它可能不会完成。相反,一切都必须发生在匿名
函数(data){}
中。请参阅我提供的链接。