替换对象值lodash

时间:2016-11-03 04:27:43

标签: javascript lodash

假设我有一个对象

var users = [
  { Mike:    'true' },
  { Tony:    'True' },
  { Ismael:  'RU' }
];

我有这个问题,我想要规范化我的对象,基本上替换" true"或" True"使用布尔值true,其他任何内容都应为false

顺便说一句,users的语法错误,Chrome告诉我users.constructor == Object而不是Array

如何使用lodash实现这一目标?

3 个答案:

答案 0 :(得分:8)

在Lodash中,您可以使用_.mapValues



const users = [
  { Mike: 'true' },
  { Tony: 'True' },
  { Ismael: 'RU' },
];
const normalisedUsers = users.map(user =>
  _.mapValues(user, val => val.toLowerCase() === 'true')
);
console.log(normalisedUsers);

<script src="https://cdn.jsdelivr.net/lodash/4.16.3/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:6)

您不必使用lodash。您可以使用原生Array.prototype.map()功能:

const users = [
  { Mike: 'true' },
  { Tony: 'True' },
  { Ismael: 'RU' },
];
const normalisedUsers = users.map(user =>
  // Get keys of the object
  Object.keys(user)
   // Map them to [key, value] pairs
   .map(key => [key, user[key].toLowerCase() === 'true'])
   // Turn the [key, value] pairs back to an object
   .reduce((obj, [key, value]) => (obj[key] = value, obj), {})
);
console.log(normalisedUsers);

功能编程FTW!

答案 2 :(得分:-1)

你不需要lodash来实现这一点,只需使用for循环。这是一个例子

var users = [
  { Mike:    'true' },
  { Tony:    'True' },
  { Ismael:  'RU' }
];

for (key in users) {
   if (users[key] == 'true' || users[key] == 'True') {
      users[key] = true
   } else {
     users[key] = false
   }
}

这样做,如果您的值为'true'或'True',则为您的对象&amp;分配一个布尔值为true的值。否则分配错误。

修改

您也可以按照 4castle 的建议采用速记方式:

users[key] = users[key] == 'true' || users[key] == 'True';

只需用这一行替换if / else块。