Zmiana nazwy key obiektu po spelnieniu warunku

0

Spędziłem trochę nad tym zadaniem ale żadnym sposobem nie mogę go rozwiązać. To co tam powypisywałem to tylko jedna z prób. Jak to najprościej zrobić?


function pluraliseKeys(obj) {
  /*
    In this function you will be provided with an object. That object is storing information on keys. 
    E.g. {
      name: 'Tom',
      job: ['writing katas', 'marking'],
      favouriteShop: [
        "Paul's Donkey University",
        "Shaq's Taxidermy Shack",
        "Sam's Pet Shop"
      ]
    };

    In some cases, however, the keys have been very badly named. Good naming convention tells us that the keys containing arrays should be named as plurals. 
    This function should return a **new object** that is a copy of the input but with any keys that contain arrays pluralised (an 's' added to the end.)
  
    
    E.g. {
      name: 'Tom',
      jobs: ['writing katas', 'marking'],
      favouriteShops: [
        "Paul's Donkey University",
        "Shaq's Taxidermy Shack",
        "Sam's Pet Shop"
      ]
    }
  */

  let objNew = {...obj};

  for ( let key in objNew ) {
    if ( Array.isArray(objNew[key]) ) {
      objNew[objNew[key] + 's'] = objNew[objNew[key]];
      delete objNew[objNew[key]];
    }
  }

  return objNew;
}

3

Zauważ, że objNew[key] zwraca wartość obiektu pod danym kluczem - a zatem objNew[key] + 's' nie ma za wiele sensu.

tl;dr objNew[key + 's'] = objNew[key], delete też do poprawy podobnie.

0

W miarę kombinujesz, +1 za to.
Musisz przejść przez listę klucz -> wartość, sprawdzić czy wartość jest array (co już masz) i tylko wtedy dodać 's' na końcu. (co próbujesz)
Najlepiej zrobić nowy obiekt, bazując na starym.
(Weryfikuje array oraz czy już nie kończy się na 's', jak tego NIE MA to po prostu przepisuje do nowego obiektu)

const result = Object.entries(input).reduce((arr, [key, val]) => {
  if (Array.isArray(val) && !key.endsWith('s')) {
  	arr[`${key}s`] = val;  
	} else {
    arr[key] = val;
  }
  return arr;
}, {});

0

Tak się zastanawiam... jaki jest use case tego rozwiązania...? Co ci to daje? Czy nie lepiej po prostu zrobić wszędzie liczbę mnogą i tablice... co za różnica czy będzie w tablicy jedna opcja czy kilka? Odpada ci wtedy cały ten bezsensowny problem z kluczami...

No chyba, że to jest potrzebne z jakiegoś powodu...

1 użytkowników online, w tym zalogowanych: 0, gości: 1