gpt4 book ai didi

javascript:使用回调函数未获得正确的结果

转载 作者:行者123 更新时间:2023-11-28 01:27:37 25 4
gpt4 key购买 nike

我查看了类似的问题并尝试了 Object.key(patentList).length 但它返回 0。建议我使用回调,这就是我实现它的方式。

var data;
var patientList = {};
var parseDate = d3.time.format("%d/%m/%y").parse;

function input_Data() {

d3.json("data.php", function(error, json) {
if (error) return console.warn(error);
data = json;
console.log(data);

for(var i = 0; i < data.length; i++) {
var name = data[i].name;
//data[i].dates = parseDate(data[i].dates);
if(!patientList[name]) {

var newPatient = {
dates: [data[i].dates],
alpha: data[i].alpha,
beta: data[i].beta
};

patientList[name] = newPatient;

} else {

patientList[name].dates.push(data[i].dates);
}
}
console.log(patientList);
console.log(Object.keys(patientList).length);
console.log(Object.keys(patientList));
});

}

function number_of_patients(callback) {
callback();
console.log(patientList);
console.log(Object.keys(patientList).length);
console.log(Object.keys(patientList));
}

number_of_patients(input_Data);

input_Data 函数中的 console.log 显示长度为 4 的正确结果。 number_of_病人中的 console.log 显示正确的病人列表,但长度为 0,并且也不显示姓名(键)。我读过类似的帖子,但仍然无法解决这里的问题。

任何帮助将不胜感激。

最佳答案

在 Javascript 中,通用对象没有具有长度属性。

有关 Javascript 对象的常见事实:

  • 对象包含键:值对,其中键是字符串,值可以是任何类型。
  • 对象没有 .keys() 方法来获取所有键,除了...
  • Ecmascript 5 提供了一个 Object.keys(),可以像 underscore.js 等一些第 3 方库一样显式调用
  • 使用大括号{}key:value 对进行初始化

在此之前,计算或访问对象特定实例唯一的所有键的常用方法是使用如下循环:

l=0;    
for(var k in obj){
if (obj.hasOwnProperty(k)){
// hasOwnProperty ignores keys from the prototype chain
// do something with key k, value obj[k]
++l;
}
}
// the object has l keys specific to this instance

如果您需要快速获取长度,您应该考虑使用数组对象:

  • 数组对象 (x = [1,2,3,'sam',{'name':'fred', 'status': 'dead'}]) 的数字索引以0 并且可以包含任意类型的成员。
  • 具有长度属性(x.length 为 5)
  • 通过带方括号的数字索引访问值,即 x[2] 为 3
  • 初始化时使用方括号[],其中包含逗号分隔的值列表

正如其他人在评论中所说,异步调用通常会立即返回 - 并且没有您想要的范围内的数据或对象。要访问数据,您必须在定义数据的上下文中执行代码,即编写在回调函数中访问异步数据/对象的代码,而不是主代码。

关于javascript:使用回调函数未获得正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495399/

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