biwhitfield
biwhitfield

Reputation: 51

Using map, how do I transform a yes and no string in an objects property into a boolean true and false value in javascript

I have an array of cat objects and I have to use the map function to change the "readyForHome" property from a string 'Yes' 'No' to be a boolean value true or false. It will be a part of a function that does various other things to the array.

I'm pretty new to higher order functions and everything I've read on here doesn't seem to work for me. Does anyone have an idea as to how they would approach this?

 var cats = [
  { id: '1', name: 'rupert', readyForHome: 'No', age: 12, personality: ['friendly', 'lazy', 'loving']},
  { id: '2', name: 'mrs fluffy', readyForHome: 'Yes', age: 2, personality: ['affectionate', 'playful', 'shy']},
  { id: '3', name: 'tabitha', readyForHome: 'Yes', age: 4, personality: ['aggressive', 'independent']},
  { id: '4', name: 'lily', readyForHome: 'No', age: 8, personality: ['friendly', 'playful', 'mischievous']},
  { id: '5', name: 'stripe', readyForHome: 'Yes', age: 1, personality: ['haughty', 'independent']},
  { id: '6', name: 'bob', readyForHome: 'Yes', age: 1, personality: ['aggressive', 'antisocial', 'nervous']},
  { id: '7', name: 'jean claude cat damme', readyForHome: 'Yes', age: 11, personality: ['sleepy', 'shy', 'loving']},
  { id: '8', name: 'tilly', readyForHome: 'Yes', age: 4, personality: ['playful', 'social', 'attention-seeking']},
  { id: '9', name: 'milo', readyForHome: 'No', age: 7, personality: ['mischievous', 'friendly']},
  { id: '10', name: 'mr claws', readyForHome: 'Yes', age: 13, personality: ['affectionate', 'shy', 'nervous']},
  { id: '11', name: 'robert zimmercat', readyForHome: 'Yes', age: 3, personality: ['folksy', 'prolific', 'neurotic']}
];

Upvotes: 1

Views: 1397

Answers (3)

biwhitfield
biwhitfield

Reputation: 51

  var catMap = arr.map(function (cat) {
  cat.readyForHome = cat.readyForHome === 'Yes' ? true : false;
    return cat;

})

This is what I ended up with. Apologies for not posting what I'd hacked about with earlier. I'm new to usuing Stack Overflow and to be honest I'd kind of forgotten I'd posted the question! Thank you all for taking the time to answer :)

Upvotes: 0

cнŝdk
cнŝdk

Reputation: 32145

You should use a function, that takes your cat object and change it's readyForHome property accordingly, as a callback for map() method.

That's what you need:

cats = cats.map(function(cat){
     cat.readyForHome.toUpperCase() === "YES" ? cat.readyForHome = true : cat.readyForHome = false;
     return cat;
});

var cats = [{
    id: '1',
    name: 'rupert',
    readyForHome: 'No',
    age: 12,
    personality: ['friendly', 'lazy', 'loving']
  },
  {
    id: '2',
    name: 'mrs fluffy',
    readyForHome: 'Yes',
    age: 2,
    personality: ['affectionate', 'playful', 'shy']
  },
  {
    id: '3',
    name: 'tabitha',
    readyForHome: 'Yes',
    age: 4,
    personality: ['aggressive', 'independent']
  },
  {
    id: '4',
    name: 'lily',
    readyForHome: 'No',
    age: 8,
    personality: ['friendly', 'playful', 'mischievous']
  },
  {
    id: '5',
    name: 'stripe',
    readyForHome: 'Yes',
    age: 1,
    personality: ['haughty', 'independent']
  },
  {
    id: '6',
    name: 'bob',
    readyForHome: 'Yes',
    age: 1,
    personality: ['aggressive', 'antisocial', 'nervous']
  },
  {
    id: '7',
    name: 'jean claude cat damme',
    readyForHome: 'Yes',
    age: 11,
    personality: ['sleepy', 'shy', 'loving']
  },
  {
    id: '8',
    name: 'tilly',
    readyForHome: 'Yes',
    age: 4,
    personality: ['playful', 'social', 'attention-seeking']
  },
  {
    id: '9',
    name: 'milo',
    readyForHome: 'No',
    age: 7,
    personality: ['mischievous', 'friendly']
  },
  {
    id: '10',
    name: 'mr claws',
    readyForHome: 'Yes',
    age: 13,
    personality: ['affectionate', 'shy', 'nervous']
  },
  {
    id: '11',
    name: 'robert zimmercat',
    readyForHome: 'Yes',
    age: 3,
    personality: ['folksy', 'prolific', 'neurotic']
  }
];


cats = cats.map(function(cat) {
  cat.readyForHome.toUpperCase() === "YES" ? cat.readyForHome = true : cat.readyForHome = false;
  return cat;
});
console.log(cats);

Upvotes: 2

eavichay
eavichay

Reputation: 517

 var cats = [
  { id: '1', name: 'rupert', readyForHome: 'No', age: 12, personality: ['friendly', 'lazy', 'loving']},
  { id: '2', name: 'mrs fluffy', readyForHome: 'Yes', age: 2, personality: ['affectionate', 'playful', 'shy']},
  { id: '3', name: 'tabitha', readyForHome: 'Yes', age: 4, personality: ['aggressive', 'independent']},
  { id: '4', name: 'lily', readyForHome: 'No', age: 8, personality: ['friendly', 'playful', 'mischievous']},
  { id: '5', name: 'stripe', readyForHome: 'Yes', age: 1, personality: ['haughty', 'independent']},
  { id: '6', name: 'bob', readyForHome: 'Yes', age: 1, personality: ['aggressive', 'antisocial', 'nervous']},
  { id: '7', name: 'jean claude cat damme', readyForHome: 'Yes', age: 11, personality: ['sleepy', 'shy', 'loving']},
  { id: '8', name: 'tilly', readyForHome: 'Yes', age: 4, personality: ['playful', 'social', 'attention-seeking']},
  { id: '9', name: 'milo', readyForHome: 'No', age: 7, personality: ['mischievous', 'friendly']},
  { id: '10', name: 'mr claws', readyForHome: 'Yes', age: 13, personality: ['affectionate', 'shy', 'nervous']},
  { id: '11', name: 'robert zimmercat', readyForHome: 'Yes', age: 3, personality: ['folksy', 'prolific', 'neurotic']}
].map( cat => {
cat.readyForHome = (cat.readyForHome === 'Yes'); // true only if 'Yes'
return cat;
});
console.log(cats);

Upvotes: 0

Related Questions