繁体   English   中英

从嵌套的对象数组中获取键

[英]get keys from the nested array of objects

我正在寻找一个可以改变我的数据的函数,即带有嵌套对象的对象数组。 它将包括具有对象/数组值的键(它应该只包括具有直接字符串/数字/布尔值的键)。

例子

[
{
  id: 1,
  person1: {
    firstname: "test1",
    lastname: 'singh',
    address: {
        state: "maharashtra",
    }
  }
},
{
  id: 2,
  person2: {
    firstname: "test2",
    lastname: 'rathod',
    address: {
        state: "kerala",
    }
  }
},
{
  id: 3, 
  person3: {
    firstname: "test3",
    lastname: 'gokale',
    address: {
        state: "Tamilnadu",
    }
  }
}

]

预期产出

[
{
  title: 'person1',
  value: 'person.id'
},
{
    title: 'person1',
    value: 'person.firstname'
},
{
    title: 'person1',
    value: 'person.lastname'
},
{
    title: 'person1',
    value: 'person.address'
},
{
    title: 'person1',
    value: 'person.address.state'
},
...sameforOthers

]

基本上,我需要一个函数来获取一个数组并返回一个对象数组,如上面给出的预期输出

提前致谢

我想出了一个解决方案。 以下是https://codesandbox.io/s/heuristic-rubin-yy2cyy?file=/src/index.js:0-213same的代码沙箱链接

 const suggestions = [
      {
        id: 1,
        person1: {
          id: "1",
          firstname: "test1",
          lastname: "singh",
          address: {
            state: "maharashtra"
          },
          attributeId: "fhgfgh"
        }
      }
    ];

const typeList = ["string", "number", "boolean"];

const getLabelValue = (itemList, initalArr, parentId) => {
  if (Array.isArray(itemList)) {
    itemList.forEach((currentItem, idx) => {
      const id = parentId ? `${parentId}.${idx}` : idx;
      if (typeList.includes(typeof currentItem)) {
        initalArr.push({
          title: id,
          value: id
        });
      } else {
        getLabelValue(currentItem, initalArr, id);
      }
    });
  } else {
    let keys = Object.keys(itemList);
    keys.forEach((currentKey) => {
      let currentItem = itemList[currentKey];
      const id = parentId ? `${parentId}.${currentKey}` : currentKey;
      if (typeList.includes(typeof currentItem)) {
        initalArr.push({
          title: id,
          value: id
        });
      } else {
        getLabelValue(currentItem, initalArr, id);
      }
    });
  }
  return initalArr;
};

console.log(">>>>>>>>>", getLabelValue(suggestions, [], ""));

像这样的东西?

[
{
  id: 1,
  person1: {
    firstname: "test1",
    lastname: 'singh',
    address: {
        state: "maharashtra",
    }
  }
},
{
  id: 2,
  person2: {
    firstname: "test2",
    lastname: 'rathod',
    address: {
        state: "kerala",
    }
  }
},
{
  id: 3, 
  person3: {
    firstname: "test3",
    lastname: 'gokale',
    address: {
        state: "Tamilnadu",
    }
  }
}
].map(item => {
    return {
        id: item.id,
        title: Object.keys(item)[1],
        value: item[Object.keys(item)[1]]
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM