如何解决Object.assign 对数据进行第二次循环轰炸
当我最初加载页面 (PHP) 时,我用 4 个棒球场(当地青年体育组织的场管理日历工具)中每一个的 3 个月数据填充 JSON 对象 calHTML。
calHTML 是这样的:
{
"Field 1":{
"Apr 2021":{
"html":"some html"
},"May 2021":{
"html":"more html"
},"Jun 2021":{
"html":"even more html"
}
},"Field 2":{
"Apr 2021":{
"html":"some html"
},"Field 3":{
"Apr 2021":{
"html":"some html"
},"Field 4":{
"Apr 2021":{
"html":"some html"
},"Jun 2021":{
"html":"even more html"
}
}
}
然后当用户移动到日历上的另一个月份时,我从数据库中获取更多数据。它正在获取日历 HTML,我想将其添加到 JSON 对象中。
$.ajax({
type: "GET",url: ROOT_URL +"/getBookingMonth",data: "monthToGet="+mo,success: function(json){
let data = JSON.parse(json);
console.log(data);
if(data){
$.each(data,function(k,v){
console.log('this record');
console.log(k);
console.log(v);
console.log('updating object');
let html = v[mo]['html'];
let propPath = `["${k}"].["${mo}"].html`;
console.log('propPath: ' + propPath);
let newCal = Object.assign(calHTML[k],v); <--- BOMBING HERE
calHTML = newCal;
console.log(calHTML);
//calHTML[k][mo]['html'] = v[mo]['html'];
return;
});
它正在轰炸 let newCal = Object.assign(calHTML[k],v);但仅限于第二次迭代。错误:未捕获的类型错误:无法将未定义或空值转换为对象
为什么会发生这种情况,我该如何解决???
解决方法
我认为您的问题是您没有注意到,当您从 add_filter( 'woocommerce_available_payment_gateways','wp_unset_gateway_by_id',10,2 );`
function wp_unset_gateway_by_id( $available_gateways,$products) {
global $woocommerce;
$unset = false;
$product_ids = array('6197');
if( in_array( $product->get_id(),$product_ids ) || ( $product->is_type('variation') && in_array( $product->get_parent_id(),$product_ids ) ) ){
unset( $available_gateways['bacs'] );
return $available_gateways;
}
}
获取返回值时,它返回的是 Object.assign(calHTML[k],v)
的新值,而不是 calHTML[k]
本身的值,正如你的意思。
此外,calHTML
方法会修改目标本身(例如您的 Object.assign
),并且不会像使用 calHTML[k]
那样创建对象的副本并修改它。
所以你有两个选择:
- 将两行
{...calHTML[k],...v}
简化为let newCal = Object.assign(....calHTML = newCal;
,因为它直接修改了对象。 - 将
Object.assign(calHTML[k],v);
替换为Object.assign(calHTML[k],v);
,并将{...calHTML[k],...v}
替换为calHTML = newCal;
,这就是导致您出错的原因。
有关 calHTML[k] = newCal;
的详细信息,请参阅 here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。