Js中如何给所有树数组的对象添加一个item?
How to Add an item to All Tree Array's Objects in Js?
我想按顺序标识我的树数组中的所有对象。为此,我需要迭代所有数组对象和对象的子对象、孙对象等,并向每个对象插入 rowId。
我有什么;
rows={[
{
car: 'Audi A4',
city: 'Las Vegas',
items: null,
name: 'Sandra',
sex: 'Female'
},
{
car: 'Chevrolet Cruze',
city: 'Tokyo',
items: [
{
car: 'BMW 750',
city: 'London',
items: [
{
car: 'Toyota Corolla',
city: 'Chicago',
name: 'David',
sex: 'Male'
},
],
name: 'Robert',
sex: 'Male'
}
],
name: 'Sharon',
sex: 'Female'
}
]}
我所期望的;
rows={[
{
car: 'Audi A4',
city: 'Las Vegas',
items: null,
name: 'Sandra',
sex: 'Female',
rowId: 1
},
{
car: 'Chevrolet Cruze',
city: 'Tokyo',
items: [
{
car: 'BMW 750',
city: 'London',
items: [
{
car: 'Toyota Corolla',
city: 'Chicago',
name: 'David',
sex: 'Male',
rowId: 2
},
],
name: 'Robert',
sex: 'Male',
rowId: 3
}
],
name: 'Sharon',
sex: 'Female',
rowId: 4
}
]}
当没有内部对象时,我可以像这样进行迭代;
rows.map((row, index) => ({ ...row, rowId: index }));
也尝试了一些递归方法,但 none 其中实际上有效,但都没有在网络上找到有用的东西。
正在寻找可以指导我完成此任务的天才开发人员。提前致谢。
您可以采用 depth-first search 算法并将 id
添加到每个对象。
const addId = (data, id) => {
const iter = array => array.forEach(o => {
if (o.items) iter(o.items); // search first
o.id = id++; // add later
});
iter(data);
};
var rows = [{ car: 'Audi A4', city: 'Las Vegas', items: null, name: 'Sandra', sex: 'Female' }, { car: 'Chevrolet Cruze', city: 'Tokyo', items: [{ car: 'BMW 750', city: 'London', items: [{ car: 'Toyota Corolla', city: 'Chicago', name: 'David', sex: 'Male' },], name: 'Robert', sex: 'Male' }], name: 'Sharon', sex: 'Female' }];
addId(rows, 1);
console.log(rows);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我想按顺序标识我的树数组中的所有对象。为此,我需要迭代所有数组对象和对象的子对象、孙对象等,并向每个对象插入 rowId。
我有什么;
rows={[
{
car: 'Audi A4',
city: 'Las Vegas',
items: null,
name: 'Sandra',
sex: 'Female'
},
{
car: 'Chevrolet Cruze',
city: 'Tokyo',
items: [
{
car: 'BMW 750',
city: 'London',
items: [
{
car: 'Toyota Corolla',
city: 'Chicago',
name: 'David',
sex: 'Male'
},
],
name: 'Robert',
sex: 'Male'
}
],
name: 'Sharon',
sex: 'Female'
}
]}
我所期望的;
rows={[
{
car: 'Audi A4',
city: 'Las Vegas',
items: null,
name: 'Sandra',
sex: 'Female',
rowId: 1
},
{
car: 'Chevrolet Cruze',
city: 'Tokyo',
items: [
{
car: 'BMW 750',
city: 'London',
items: [
{
car: 'Toyota Corolla',
city: 'Chicago',
name: 'David',
sex: 'Male',
rowId: 2
},
],
name: 'Robert',
sex: 'Male',
rowId: 3
}
],
name: 'Sharon',
sex: 'Female',
rowId: 4
}
]}
当没有内部对象时,我可以像这样进行迭代;
rows.map((row, index) => ({ ...row, rowId: index }));
也尝试了一些递归方法,但 none 其中实际上有效,但都没有在网络上找到有用的东西。
正在寻找可以指导我完成此任务的天才开发人员。提前致谢。
您可以采用 depth-first search 算法并将 id
添加到每个对象。
const addId = (data, id) => {
const iter = array => array.forEach(o => {
if (o.items) iter(o.items); // search first
o.id = id++; // add later
});
iter(data);
};
var rows = [{ car: 'Audi A4', city: 'Las Vegas', items: null, name: 'Sandra', sex: 'Female' }, { car: 'Chevrolet Cruze', city: 'Tokyo', items: [{ car: 'BMW 750', city: 'London', items: [{ car: 'Toyota Corolla', city: 'Chicago', name: 'David', sex: 'Male' },], name: 'Robert', sex: 'Male' }], name: 'Sharon', sex: 'Female' }];
addId(rows, 1);
console.log(rows);
.as-console-wrapper { max-height: 100% !important; top: 0; }