Creating an updated and edited nested object from given one (JavaScript)

flow24

I got a schema object that looks like this:

const schema = {
social: {
    facebook: 'someValue',
    twitter: {
        department: {
            departmentImage: {
                editable: 'someValue'
            }
         }
      }
   }
};

The editable property indicates a value that I want to edit, and may appear in several nested locations in the object.

My approach to edit it is to recursively create a new object who is an exact copy of the original, and populate a new value where I encounter editable. Like this:

const formatSchema = (schema, data, formattedSchema = {}) => {
  for (const schemaKey in schema) {
    const firstKey = Object.keys(schema[schemaKey])[0];
            
    if (schema[schemaKey] instanceof Object) {
        formattedSchema[schemaKey] = schema[schemaKey];
        formatschema(schema[schemaKey], data, formattedSchema[schemaKey]);
    }
    if (schema[schemaKey] instanceof Object && firstKey === 'editable') {
       *replacing data logic*
       formattedSchema[schemaKey] = ...*replacingData*;
       formatschema(schema[schemaKey], data, formattedSchema[schemaKey]);
    } else {
        formattedSchema[schemaKey] = schema[schemaKey];
    }
  }
 return formattedSchema;
};

But I feel this solution may be inefficient as I create every single bit of the object from scratch and this would happen thousands of times a day.

Is there a way to do it better?

Mulan

Here's a recursive immutable update that works for any native input type. Don't worry about performance here as it's plenty fast, even if your object has thousands of fields. Let me know how this suits you and I can make a change if it's needed -

function update(t, func) {
  switch (t?.constructor) {
    case Object:
      return Object.fromEntries(
        Object.entries(t).map(([k,v]) =>
          [k, func([k, update(v, func)])]
        )
      )
    case Array:
      return t.map((v, k) => func([k, update(v, func)]))
    default:
      return func([null, t])
  }
}

const schema = {
  social: {
    facebook: 'someValue',
    twitter: {
      department: {
        departmentImage: {
            editable: 'someValue'
        }
      },
      someArr: [{ editable: 1 }, { editable: 2 }, { hello: "world" }]
    },
  }
}

console.log(update(schema, ([k,v]) =>
  k == "editable" ? "✅" : v
))
.as-console-wrapper {min-height: 100% !important; top: 0}

{
  "social": {
    "facebook": "someValue",
    "twitter": {
      "department": {
        "departmentImage": {
          "editable": "✅"
        }
      },
      "someArr": [
        {
          "editable": "✅"
        },
        {
          "editable": "✅"
        },
        {
          "hello": "world"
        }
      ]
    }
  }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Creating a nested Javascript Object from an array of Strings

From Dev

Saving updated dataframe from edited PyQt5 QTableView object

From Javascript

Creating nested json object based on given condition

From Dev

What's the best way of creating a new object with updated nested properties in modern JavaScript

From Dev

Creating a nested object from entries

From Dev

Javascript Replacing nested array of objects with updated object

From Dev

How do I prevent Rails from checking a unique constraint against the object being edited/updated?

From Dev

Javascript building a nested object from a nested object

From Javascript

JavaScript: Get number of edited/updated inputs

From Dev

Functionally creating a nested object from a flat structure

From Dev

Update Javascript nested Object one by one

From Dev

Getting error while creating two object from one object using loop in javascript

From Dev

Javascript - reduce the given object into one data structure

From Dev

Creating one hot vector from indices given as a tensor

From Dev

Javascript date object automatically add one day when creating from date string

From Dev

delete object from a nested object in javascript

From Dev

Simple array object from nested object in javascript

From Dev

creating array of objects from given custom object in Java

From Dev

JavaScript: Change All Values of Deeply nested object given path

From Dev

How to replace every key in a nested object given a mapping in JavaScript?

From Dev

Remove a given entry from an object in javascript

From Dev

creating nested object with pandas

From Dev

JS - copy object from an array to the new one when the condition is met [edited]

From Dev

creating cutom nested object by adding key in javascript / node js

From Dev

Creating an 'object accessor' function - Deeply nested javascript objects

From Dev

Javascript plugin for creating select elements from an object

From Dev

Creating javascript object from array values

From Javascript

Creating a JavaScript Object from two arrays

From Dev

Javascript creating class object from string

Related Related

  1. 1

    Creating a nested Javascript Object from an array of Strings

  2. 2

    Saving updated dataframe from edited PyQt5 QTableView object

  3. 3

    Creating nested json object based on given condition

  4. 4

    What's the best way of creating a new object with updated nested properties in modern JavaScript

  5. 5

    Creating a nested object from entries

  6. 6

    Javascript Replacing nested array of objects with updated object

  7. 7

    How do I prevent Rails from checking a unique constraint against the object being edited/updated?

  8. 8

    Javascript building a nested object from a nested object

  9. 9

    JavaScript: Get number of edited/updated inputs

  10. 10

    Functionally creating a nested object from a flat structure

  11. 11

    Update Javascript nested Object one by one

  12. 12

    Getting error while creating two object from one object using loop in javascript

  13. 13

    Javascript - reduce the given object into one data structure

  14. 14

    Creating one hot vector from indices given as a tensor

  15. 15

    Javascript date object automatically add one day when creating from date string

  16. 16

    delete object from a nested object in javascript

  17. 17

    Simple array object from nested object in javascript

  18. 18

    creating array of objects from given custom object in Java

  19. 19

    JavaScript: Change All Values of Deeply nested object given path

  20. 20

    How to replace every key in a nested object given a mapping in JavaScript?

  21. 21

    Remove a given entry from an object in javascript

  22. 22

    creating nested object with pandas

  23. 23

    JS - copy object from an array to the new one when the condition is met [edited]

  24. 24

    creating cutom nested object by adding key in javascript / node js

  25. 25

    Creating an 'object accessor' function - Deeply nested javascript objects

  26. 26

    Javascript plugin for creating select elements from an object

  27. 27

    Creating javascript object from array values

  28. 28

    Creating a JavaScript Object from two arrays

  29. 29

    Javascript creating class object from string

HotTag

Archive