0

Trying to create a function that does not allow an object to crate a new key if the value of the key has already been used.

So the object cannot have name = crystal and favoriteRock = crystal Once value has been declared, no other key within the object can have that value.

Not sure why I keep getting undefined

let keyAdderUniqueVal = function (object, key, value) {
    let allvalues = Object.values(object)
    if (!allvalues.includes(value)) {
        object[key] = value
    } else {
        return object
    }
}

This is what a working code is suppose to do

let horse = { name: 'Spirit', color: 'brown' };
keyAdderUniqueVal(horse, "food", "carrot"); // => {name: "Spirit", color: "brown", food: "carrot"}
keyAdderUniqueVal(horse, "hair", "brown"); // => {name: "Spirit", color: "brown", food: "carrot"}
console.log(horse); // { name: "Spirit", color: "brown", food: "carrot" }

2 Answers2

0

The problem is that in the first part of your if statement you are adding the key but you are not returning the object, u are only doing that in the else part. Also, consider creating a new object instead of modifying it in place, for example:

const keyAdderUniqueVal = (object, key, value) => {
  const newObject = { ...object }
  const allvalues = Object.values(newObject)
  if (!allvalues.includes(value)) newObject[key] = value 
  
  return newObject
}

let horse = { name: 'Spirit', color: 'brown' }
horse = keyAdderUniqueVal(horse, "food", "carrot");
console.log(horse)
>>> { color:brown,food:carrot,name:Spirit }

horse = keyAdderUniqueVal(horse, "hair", "brown");
console.log(horse)
>>> { color:brown,food:carrot,name:Spirit }
marcos
  • 4,473
  • 1
  • 10
  • 24
0

you can try this

const keyAdderUniqueVal = (object, key, value) => !Object.values(object).includes(value) && (object[key] = value)

let horse = { name: 'Spirit', color: 'brown' };
keyAdderUniqueVal(horse, "food", "carrot"); // => {name: "Spirit", color: "brown", food: "carrot"}
keyAdderUniqueVal(horse, "hair", "brown"); // => {name: "Spirit", color: "brown", food: "carrot"}
keyAdderUniqueVal(horse, "spirit", "brown");
keyAdderUniqueVal(horse, "some", "brown");
keyAdderUniqueVal(horse, "star", "brown");
console.log(horse); // { name: "Spirit", color: "brown", food: "carrot" }
Amine Beihaqi
  • 177
  • 2
  • 8