向所有嵌套对象添加键/值

问题描述 投票:0回答:1

我有一个对象数组,里面有一个对象数组(里面还有另一个)。

const array = [
  {
    id: 1,
    prod: [
      {
        id: 1,
        op: [
          {
            id: 1
          },
          {
            id: 2
          }
        ]
      },
      {
        id: 2,
        op: [
          {
            id: 1
          }
        ]
      }
    ]
  },
  {
    id: 2,
    prod: [
      {
        id: 1,
        op: [
          {
            id: 1
          },
          {
            id: 2
          }
        ]
      },
      {
        id: 2,
        op: [
          {
            id: 1
          }
        ]
      }
    ]
  }
];

问题是如何在每个键值中输入一个新的键值,使其看起来像这样:

[
  {
    id: 1,
    isChecked: false,
    prod: [
      {
        id: 1,
        isChecked: false,
        op: [
          {
            id: 1,
            isChecked: false
          },
          {
            id: 2,
            isChecked: false
          }
        ]
      },
      {
        id: 2,
        isChecked: false,
        op: [
          {
            id: 1,
            isChecked: false
          }
        ]
      }
    ]
  },
  {
    id: 2,
    isChecked: false,
    prod: [
      {
        id: 1,
        isChecked: false,
        op: [
          {
            id: 1,
            isChecked: false
          },
          {
            id: 2,
            isChecked: false
          }
        ]
      },
      {
        id: 2,
        isChecked: false,
        op: [
          {
            id: 1,
            isChecked: false
          }
        ]
      }
    ]
  }
];

我知道迭代是可以实现的

array.map(object => {
  return {
    ...object,
    isChecked: false
  }
})

但是有更好的方法吗? 以某种方式所有对象都具有该键/值而无需多次迭代

javascript arrays javascript-objects
1个回答
0
投票

const addCheck = arr => arr.map(({id, ...item}) => {
    const arrays = Object.entries(item).filter(([_, val]) => Array.isArray(val)).map(([key, val]) => [key, addCheck(val)]);
    return Object.assign({id, isChecked: false}, item, Object.fromEntries(arrays));
  });

const result = addCheck(array);

console.log(result);
<script>
const array = [
  {
    id: 1,
    prod: [
      {
        id: 1,
        op: [
          {
            id: 1
          },
          {
            id: 2
          }
        ]
      },
      {
        id: 2,
        op: [
          {
            id: 1
          }
        ]
      }
    ]
  },
  {
    id: 2,
    prod: [
      {
        id: 1,
        op: [
          {
            id: 1
          },
          {
            id: 2
          }
        ]
      },
      {
        id: 2,
        op: [
          {
            id: 1
          }
        ]
      }
    ]
  }
];

</script>

© www.soinside.com 2019 - 2024. All rights reserved.