在 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(' / ');