js 多层嵌套的数组,找到最后两层数据
时间: 2023-06-24 15:06:36 浏览: 155
可以使用递归函数来遍历多层嵌套的数组,直到找到最后两层数据为止。以下是一个简单的示例代码:
```javascript
function findLastTwoLayers(arr) {
let result = [];
arr.forEach(element => {
if (Array.isArray(element)) {
// 如果当前元素是数组,则递归调用函数
result.push(...findLastTwoLayers(element));
} else {
// 如果当前元素不是数组,则将其添加到结果数组中
result.push(element);
}
});
return result;
}
// 示例用法
const nestedArray = [1, [2, [3, 4]], 5, [6]];
const lastTwoLayers = findLastTwoLayers(nestedArray);
console.log(lastTwoLayers); // 输出 [3, 4, 6]
```
该函数接受一个多层嵌套的数组作为参数,并返回最后两层数据组成的新数组。函数使用 `Array.isArray()` 方法来判断当前元素是否为数组,如果是则递归调用函数,否则将其添加到结果数组中。最终返回的结果数组就是最后两层数据组成的新数组。
相关问题
js嵌套多层数组对象改值
如果你想修改多层嵌套的 JavaScript 对象或者数组中的某个值,可以使用递归方法来实现。以下是一个递归函数的示例,可以修改多层嵌套的对象或数组中的值:
```javascript
function setValue(obj, key, value) {
if (typeof obj !== "object" || obj === null) {
return;
}
if (obj.hasOwnProperty(key)) {
obj[key] = value;
return;
}
for (let k in obj) {
if (obj.hasOwnProperty(k)) {
setValue(obj[k], key, value);
}
}
}
```
这个函数接受三个参数:要修改的对象、要修改的键以及要设置的值。如果对象不是一个对象或者为 null,函数直接返回。如果对象中已经存在要修改的键,那么将其值设置为要设置的值。如果对象中不存在要修改的键,则递归遍历对象的属性并调用 setValue 函数,直到找到要修改的键为止。
这是一个示例使用方法:
```javascript
let nestedObj = {
a: {
b: {
c: 1,
d: [2, 3],
},
},
};
console.log(nestedObj); // {a: {b: {c: 1, d: [2, 3]}}}
setValue(nestedObj, "c", 4);
console.log(nestedObj); // {a: {b: {c: 4, d: [2, 3]}}}
setValue(nestedObj, "d", [4, 5]);
console.log(nestedObj); // {a: {b: {c: 4, d: [4, 5]}}}
```
在这个示例中,我们修改了嵌套对象中的两个值:c 和 d。通过递归函数 setValue,我们可以轻松地修改嵌套对象中的值。
data2 = [{ name: "治安管理工作", children: [{ name: "娱乐场所治安管理", children: [{ name: "娱乐场所治安管理工作" }] }] 把这个多层嵌套数组里的每一层数据的name的值改成其他的
你可以使用递归的方式来遍历多层嵌套的数组,然后修改每个对象中的 name 属性。
以下是一个修改多层嵌套数组中 name 属性的示例代码:
```javascript
let data2 = [
{
name: "治安管理工作",
children: [
{
name: "娱乐场所治安管理",
children: [
{
name: "娱乐场所治安管理工作"
}
]
}
]
}
];
function modifyName(arr, newName) {
if (Array.isArray(arr)) {
arr.forEach((item) => {
if (item.hasOwnProperty("name")) {
item.name = newName;
}
if (item.hasOwnProperty("children")) {
modifyName(item.children, newName);
}
});
}
}
modifyName(data2, "new name");
console.log(data2);
```
这个函数接受两个参数:要修改的数组和新的 name 值。如果数组是一个数组,那么就遍历数组中的每个对象。如果对象中有 name 属性,则将其值修改为新的 name 值。如果对象中有 children 属性,则递归调用 modifyName 函数,继续遍历其 children 属性中的每个对象。
这是一个示例使用方法:
```javascript
let data2 = [
{
name: "治安管理工作",
children: [
{
name: "娱乐场所治安管理",
children: [
{
name: "娱乐场所治安管理工作"
}
]
}
]
}
];
console.log(data2); // [{name: "治安管理工作",children: [{name: "娱乐场所治安管理",children: [{name: "娱乐场所治安管理工作"}]}]}]
modifyName(data2, "new name");
console.log(data2); // [{name: "new name",children: [{name: "new name",children: [{name: "new name"}]}]}]
```
在这个示例中,我们将多层嵌套数组中的每个对象的 name 属性都修改为了 "new name"。
阅读全文