gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:44:12 26 4
gpt4 key购买 nike

我有一个名为“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/

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