在 javascript/typescript 中过滤 json
Filtering json in javascript/typescript
我有一个 json 如下。
const d = {
data:{name:"name1", type:"abc"},
parent:{
data: {name:"parent1"},
parent:{
data: { name:"superparent1"},
parent: null
}
}
}
我想在数组中将最终输出作为“superparent1 / parent1 / name1”。它应该显示父级直到父级为空。我该怎么做?
使用递归方法你可以做这样的事情:
const filter = (a) => {
if(a.parent == null) {
return [a.data.name];
} else {
return [...filter(a.parent), a.data.name];
}
}
您可以在必要时添加适当的打字稿类型。
const d = {
data: {
name: "name1",
type: "abc"
},
parent: {
data: {
name: "parent1"
},
parent: {
data: {
name: "superparent1"
},
parent: null
}
}
}
const d1 = {
data: {
name: "name1",
type: "abc"
},
parent: {
data: {
name: "parent1"
},
parent: {
data: {
name: "superparent1"
},
parent: null
}
}
}
const resArr = [];
const formatFunc = (obj, arr) => {
if (obj) {
arr.push(obj.data.name);
return formatFunc(obj.parent, arr);
} else {
return "end";
}
}
const formatArrObj = (arr) => {
let iArr = [];
arr.map(item => {
formatFunc(item, iArr);
const str = iArr.reverse().join("/");
resArr.push(str);
iArr = [];
})
}
formatArrObj([d, d1]);
console.log(resArr);
这就是您要找的东西吗?
看来您需要这样的代码:
const output = [];
const getParent = (obj) => {
output.push(obj.data.name)
if (!obj.parent) {
return
}
return getParent(obj.parent)
}
getParent(d);
const formattedOutput = output.reverse().join(' / ');
我有一个 json 如下。
const d = {
data:{name:"name1", type:"abc"},
parent:{
data: {name:"parent1"},
parent:{
data: { name:"superparent1"},
parent: null
}
}
}
我想在数组中将最终输出作为“superparent1 / parent1 / name1”。它应该显示父级直到父级为空。我该怎么做?
使用递归方法你可以做这样的事情:
const filter = (a) => {
if(a.parent == null) {
return [a.data.name];
} else {
return [...filter(a.parent), a.data.name];
}
}
您可以在必要时添加适当的打字稿类型。
const d = {
data: {
name: "name1",
type: "abc"
},
parent: {
data: {
name: "parent1"
},
parent: {
data: {
name: "superparent1"
},
parent: null
}
}
}
const d1 = {
data: {
name: "name1",
type: "abc"
},
parent: {
data: {
name: "parent1"
},
parent: {
data: {
name: "superparent1"
},
parent: null
}
}
}
const resArr = [];
const formatFunc = (obj, arr) => {
if (obj) {
arr.push(obj.data.name);
return formatFunc(obj.parent, arr);
} else {
return "end";
}
}
const formatArrObj = (arr) => {
let iArr = [];
arr.map(item => {
formatFunc(item, iArr);
const str = iArr.reverse().join("/");
resArr.push(str);
iArr = [];
})
}
formatArrObj([d, d1]);
console.log(resArr);
这就是您要找的东西吗?
看来您需要这样的代码:
const output = [];
const getParent = (obj) => {
output.push(obj.data.name)
if (!obj.parent) {
return
}
return getParent(obj.parent)
}
getParent(d);
const formattedOutput = output.reverse().join(' / ');