访问嵌套的javascript对象

时间:2017-01-15 14:58:53

标签: javascript jquery

我有一个动态表单元素,我想使用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));

3 个答案:

答案 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))