GithubHelp home page GithubHelp logo

Comments (2)

a-roberts avatar a-roberts commented on June 21, 2024 1

@binury - thank you very much, that works perfectly!

Are you thinking of creating a PR to the main readme? No worries if not as folks could find this as a useful reference. Appreciate your help

from you-dont-need-lodash-underscore.

binury avatar binury commented on June 21, 2024

Yeah if you look at what set is doing, you'll see it is a bit heavy handed πŸ˜₯ With all the "safety checks" and flexibility and edge cases, it's probably ~150 LoC across half a dozen files.

A mvp bare set, as a partner to get (basically), would be something like…
`

/**
 * @param {Object} obj
 * We'll make assumptions about path in order to avoid reimplementing
 * https://github.com/lodash/lodash/blob/main/src/.internal/stringToPath.ts
 * @param {Array|string} path
 * @param {*} value
 * @returns {Object} Returns obj
 */
function set(obj, path, value) {
  path = Array.isArray(path) ? path.join('.') : path;
  const paths = path
    .split('.')
    .map((p) => (isNaN(parseInt(p, 10)) ? p : parseInt(p, 10)));
  const lastIndex = paths.length - 1;

  let nested = obj;
  for (const [i, p] of paths.entries()) {
    if (i === lastIndex) {
      nested[p] = value;
    } else {
      nested =
        nested[p] || (nested[p] = typeof paths[i + 1] === 'number' ? [] : {});
    }
  }
  return obj;
}
const person = {
  birth: {
    dateTime: '',
    location: {
      state: 'CA',
      city: 'Los Angeles',
      hospital: {
        name: '',
      },
    },
  },
};

set(person, ['birth', 'location', 'hospital', 'name'], 'Hollywood Pediatrics');
set(person, 'vehicle.manufacturer', 'Toyota');
set(person, 'parents.0.name', 'John Doe');

console.log(person);
/*

{
  birth: {
    dateTime: '',
    location: { state: 'CA', city: 'Los Angeles', hospital: [Object] }
  },
  vehicle: { manufacturer: 'Toyota' },
  parents: [ { name: 'John Doe' } ]
}

*/

from you-dont-need-lodash-underscore.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.