如何根据给定索引更新嵌套数组中的值并返回javascript中的原始数组?



我有一个索引'3_1_0'和以下数组:-

var fields = [
{
name: 'a'
},
{
name: 'b'
},
{
name: 'c'
},
{
name: 'd',
fields: [
{
name: 'd1'
},
{
name: 'd2',
fields: [
{
name: 'd2.1'
}
]
}
]
}
]

我需要根据索引从上面的字段数组中提取元素。因此3_1_0将提取以下内容

{
name: 'd2.1'
}

将d2.1的值更新为其他值,如'new_d2.1',并将更新后的值附加到原始字段数组的相同索引处,并返回更新后的字段数组。如何做到这一点?

可以使用Array。减少以得到期望的结果。我们首先将索引拆分为一个数组,然后进行缩减以获得结果。

我们将使用一些可选链接来确保如果没有找到值(假设我们的索引是'7_10_20'),我们将返回undefined

找到对象后,可以设置所需的属性。

const fields = [ { name: 'a' }, { name: 'b' }, { name: 'c' }, { name: 'd', fields: [ { name: 'd1' }, { name: 'd2', fields: [ { name: 'd2.1' } ] } ] } ];
const index = '3_1_0'
function setValue(fields, index, property, value) {
const obj = index.split('_').reduce((acc, key) => { 
return acc?.[key] || acc?.fields?.[key];
}, fields);
// Only update if we actually find anything
if (obj) { 
obj[property] = value
}
}
setValue(fields, '3_1_0', 'name', 'new_d2.1');
console.log("Fields:", fields);

const data = [{ name: 'a' }, { name: 'b' }, { name: 'c' }, { name: 'd', fields: [ { name: 'd1' }, { name: 'd2', fields: [ { name: 'd2.1' } ] } ] } ];
let givenIdxs = "3_1_0";
let indexes = givenIdxs.split("_");
let result = data[indexes[0]];
for(let idx = 1; idx < indexes.length; idx++){
result = result.fields[indexes[idx]];
}
console.log(result);

最新更新