gpt4 book ai didi

javascript - 错误 : cannot read property push of undefined when using . 推送存储在对象中的空数组

转载 作者:行者123 更新时间:2023-11-30 11:07:57 24 4
gpt4 key购买 nike

当用户单击“保存”时,我需要使用 input_product 类从输入中收集所有数据,并将其编译为具有以下格式的 data:

data = {param1:[{upc:'upc', value:'value'}, ... ], ... paramN: [ ... ]}


我尝试使用下面的代码执行此操作,但我一直收到此错误:

Uncaught TypeError: Cannot read property 'push' of undefined

$('.save').on('click', function() {
event.preventDefault();
var data = {};

$('.input_product').each(function() {

const
param = $(this).attr('name'),
upc = $(this).parent().parent().attr('id'),
value = $(this).val()

console.log(param, upc, value); //prints qty, 1001, 5

if (value && param) {
if (!param in data) {
data[param] = [];
}
data[param].push({'upc':upc, 'value':value}); // Error is thrown here
}
});
window.someFunction(data);
});

我在这里错过了什么?

最佳答案

in 运算符的优先级低于 ! 运算符。您需要在 param in data 周围添加方括号;改变

if(!param in data)

if(!(param in data))

目前,您正在做的是将 param 的值转换为 bool 值,取反,然后检查该取反的结果是否作为对象 data< 中的键存在 (即,您正在编写的内容等同于 if((!param) in data)) ,而您想要检查 param 是否作为键存在在 data 中,如果 param 不作为 data 中的键存在,则取反执行某些代码的结果。因此,您永远不会在 data 中设置键 param 的值,因此它保持在 undefined 并且您得到 未捕获的类型错误:无法读取未定义的属性“推送”

参见 Operator Precedence .

试试这个:

$('.save').on('click', function() {
event.preventDefault();
var data = {};

$('.input_product').each(function() {

const
param = $(this).attr('name'),
upc = $(this).parent().parent().attr('id'),
value = $(this).val()

console.log(param, upc, value);

if (value && param) {
if (!(param in data)) {//added brackets
data[param] = [];
}
data[param].push({'upc':upc, 'value':value});
}
});
window.someFunction(data);
});

工作 JSFiddle 演示:https://jsfiddle.net/n6bg3da8/

关于javascript - 错误 : cannot read property push of undefined when using . 推送存储在对象中的空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54916684/

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