$value){ -6ren">
gpt4 book ai didi

javascript - "Hydrate"一个带有 json 数组的 Javascript 对象实例,就像 PHP 一样

转载 作者:行者123 更新时间:2023-11-28 15:29:24 25 4
gpt4 key购买 nike

这是“问题”,我用这样的数据填充 PHP 对象:

public function hydrate(array $data){
foreach($data as $key=>$value){
$method = 'set'.ucfirst($key);
if(METHOD_EXISTS($this,$method)){
$this->$method($value);
}
}
}

现在,我想将其转换为 javascript 对象而不是 PHP,因此,我通过 .ajax 调用从数据库获取“数据数组”,并且得到一个“看起来”像这样的 JSON 对象:

{"id":"44","name":"test","testKey":"qklfjmdjfq88"}

我的 Javascript“对象”看起来像这样:

function myObject(){
var element,id,name,testKey;

this.hydrate = function(ajaxData){
//THIS CODE DOES NOT WORK
//THAT IS THE PROBLEM
Object.keys(ajaxData).forEach(function(key){
console.log("function loop key : "+key);//OK
console.log("function loop value : "+ajaxData[key]);//OK
this.key = Element[key];
});
};
}

所以,一旦我在 js 脚本中收到 JSON“数组”,我想将其转换为 js 对象实例,所以我这样做:

var myCurrentObject = new myObject();
myCurrentObject.hydrate(/*WHAT MY AJAX CALL RETURN*/);
console.log(myCurrentObject.name);
//console shows undefined...

所以问题似乎出在 . Hydro 函数中... this.key 与 myObject 实例变量不对应... (name/id/testKey) 如何使用如下所示的函数填充 js 对象实例我在使用 php 时使用的那个?

感谢您的帮助/阅读

最佳答案

在这个函数中

this.hydrate = function(ajaxData){
Object.keys(ajaxData).forEach(function(key){
console.log("function loop key : "+key);
console.log("function loop value : "+ajaxData[key]);
this.key = Element[key];
});
};

this.key 不是指 myObject,您应该尝试:

this.hydrate = function(ajaxData){
Object.keys(ajaxData).forEach(
// Execute a function passing param this as obj that return a function
// (closure)
(function(obj){
return function(key){
obj[key] = ajaxData[key];
};
})(this)
);
};

或者将其保存在变量中

this.hydrate = function(ajaxData){
var that = this;
Object.keys(ajaxData).forEach(function(key){
that[key] = ajaxData[key];
});
};

或更简单地使用 for 循环

this.hydrate = function(ajaxData){
var k = Object.keys(ajaxData);
for(var i=0, len = k.length; i<len; i++){
this[k[i]] = ajaxData[k[i]];
}
};

关于javascript - "Hydrate"一个带有 json 数组的 Javascript 对象实例,就像 PHP 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938988/

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