Giả sử chúng ta có một mảng lồng nhau của đối tượng như sau:
const arr = [
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{ value: 'some value' },
],
},
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{
array: [
{ value: 'delete me' },
{ value: 'some value' },
]
}
],
},
],
}
];
Chúng ta cần viết một hàm JavaScript nhận mảng như vậy làm tham số đầu tiên và một mảng chỉ số làm tham số thứ hai.
Hàm sẽ xóa thuộc tính value tại tất cả các chỉ số được chỉ định bởi mảng (tham số thứ hai).
Ví dụ
Mã thực hiện:
const arr = [
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{ value: 'some value' },
],
},
{ value: 'some value' },
{
array: [
{ value: 'some value' },
{
array: [
{ value: 'delete me' },
{ value: 'some value' },
]
}
],
},
],
}
];
const keys = [1, 3, 1, 0];
const getKeys = (arr, keys) => {
const recursiveFind = (arr, level) => {
const res = [];
arr.forEach((el, ind) => {
if (keys[level] !== ind) {
return res.push(el);
}
if (level + 1 !== keys.length && el.array) {
res.push({ array: recursiveFind(el.array, level + 1) });
}
});
return res;
};
return recursiveFind(arr, 0);
};
console.log(JSON.stringify(getKeys(arr, keys), undefined, 4));
Kết quả
Kết quả trong console:
[
{
"value": "some value"
},
{
"array": [
{
"value": "some value"
},
{
"array": [
{
"value": "some value"
},
{
"value": "some value"
}
]
},
{
"value": "some value"
},
{
"array": [
{
"value": "some value"
},
{
"array": [
{
"value": "some value"
}
]
}
]
}
]
}
]