我有一个动态表单元素,我想使用ajax保存。我将数据格式化为javascript对象,并尝试更新每个元素。但我在访问嵌套元素时遇到问题,因此我可以设置一个新值。下面的结果是未定义的'但我想做的是按数字从数组中查找项目,这样我就可以更新数值。
// object to hold form data for ajax submit
var jsonLoad = {
type: 'estimate',
note: null,
terms: null,
tax: 0,
items: [
{
1 :
{
description: 'test123',
rate: 300,
qty: 1
}
},
{
2 :
{
description: 'test555',
rate: 600,
qty: 2
}
}
]
};
function getItem(i) {
jsonLoad.items.forEach(function (element) {
if ( element[i] === i ) {
return(element[i]);
}
});
}
console.log(getItem(2));
答案 0 :(得分:1)
您可以检查具有给定属性的项目并返回该项目。
如果回调返回真值, Array#some
会停止迭代。
function getItem(key) {
var item;
jsonLoad.items.some(function (object) {
return item = object[key];
});
return item;
}
var jsonLoad = { type: 'estimate', note: null, terms: null, tax: 0, items: [{ 1: { description: 'test123', rate: 300, qty: 1 } }, { 2: { description: 'test555', rate: 600, qty: 2 } }] };
console.log(getItem(2));
答案 1 :(得分:0)
element[i] === i
无效,您应该检查i
中是否存在element
的密钥,并将其替换为i in element
。有关检查对象中是否存在密钥的更多信息,请参阅Checking if a key exists in a JavaScript object?
答案 2 :(得分:0)
这是你的答案:
// object to hold form data for ajax submit
var jsonLoad = {
type: 'estimate',
note: null,
terms: null,
tax: 0,
items: [
{
1 :
{
description: 'test123',
rate: 300,
qty: 1
}
},
{
2 :
{
description: 'test555',
rate: 600,
qty: 2
}
}
]
};
function getItem(i) {
var ret = null;
jsonLoad.items.forEach(function(item){
if(item[i]){ //if the item object has the numeric key "i"
ret = item[i];
}
})
return ret;
}
console.log(getItem(2));
这是一种更有文化的检查密钥是否存在的方法:if(Object.keys(item).includes(i))