javascript - 如何使用常见方式在对象内附加元素

标签 javascript jquery

我有一个名为“x”的对象,其格式如下:

var x = [{
name: "a",
item:[{
    name: "b",
    item:[{
        name: "c",
        item:[{
            name:"f"
        }]
    },{
    name: "d",
    item:[{
        name: "e"
        }]
    }]
}]
},{
    name: "a",
    item:[{
        name: "b",
        item:[{
            name: "c"
        }]
    }]
}];

现在我将一些元素插入该对象内。例如:

x[0].item[0].name = "x";
x[0].item[0].item[0].name = "y";
x[0].item[0].item[0].item[0].name = "z";

所以,这是我的问题。我将三个元素插入对象内部。上面给出了代码,所有三个代码都是相似的,只是“项目”的数量发生了变化。示例:在第一个代码中,仅使用一个“项目”,在下一个代码中,使用两个“项目”,再接下来,使用三个项目。

那么,是否有任何有效的方法来创建一个通用函数来将元素推送到对象(或)内部,就像在数组中一样,我们可以像 x[0].items[[0][0]] 那样推送=“y”。 ?

这是jsFiddle link .

最佳答案

没有错误处理的版本

初步说明:我假设您始终具有 [n][n].item[m] 结构。该算法没有任何错误处理。

所需数组的计算方式如下:取出第一个元素并获取对象。获取下一个元素,并在应用该元素之前先获取 item 属性。然后应用数组索引。重复。完成循环后,将值应用于 name 属性。

var x=[{name:"a",item:[{name:"b",item:[{name:"c",item:[{name:"f"}]},{name:"d",item:[{name:"e"}]}]}]},{name:"a",item:[{name:"b",item:[{name:"c"}]}]}];

function push(o, a, v) {
    a.forEach(function (el, i) {
        i && (o = o.item);
        o = o[el];
    });
    o.name = v;
}

push(x, [0, 0, 0], 'y');
document.getElementById('out').innerHTML = JSON.stringify(x, null, 4);
<pre id="out"></pre>

具有错误处理功能的版本

假设什么都没有。如果格式不正确,当未给出属性 item 或数组索引超出范围时,它会抛出异常。

var x=[{name:"a",item:[{name:"b",item:[{name:"c",item:[{name:"f"}]},{name:"d",item:[{name:"e"}]}]}]},{name:"a",item:[{name:"b",item:[{name:"c"}]}]}];

function getReference(o, a) {
    a.forEach(function (el, i) {
        if (i) {
            if ('item' in o) {
                o = o.item;
            } else {
                throw new Error('No Reference (item)');
            }
        }
        if (o[el]) {
            o = o[el];
        } else {
            throw new Error('No Reference (index: ' + el + ')');
        }
    });
    return o;
}

 // working
try {
    getReference(x, [0, 0, 0, 0]).name = 'z';
} catch (ex) {
    alert(ex);
}

// throws exception 'No Reference (index: 3)'
try {
    getReference(x, [0, 0, 0, 3]).name = '*';
} catch (ex) {
    alert(ex);
}

document.getElementById('out').innerHTML = JSON.stringify(x, null, 4);
<pre id="out"></pre>

关于javascript - 如何使用常见方式在对象内附加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31774899/

相关文章:

javascript - 计算器生成控制台日志,但屏幕上没有显示任何内容

javascript - 带有 ken burns 效果幻灯片的颜色叠加

javascript - ImageMap 的外坐标

javascript - 我应该在 React 中使用 HOC 柯里化(Currying)吗?

javascript - 构造和检索具有多种尺寸的 JSON 对象(图像)

javascript - 三.js JSON 文件压缩

javascript - Onload bootstrap 选项卡触发器

javascript - 使 var 值在按钮单击中可用

jquery - 有没有办法在 jQuery 或 javascript 中克隆表单字段值?

php - 什么是数据序列化?