假设我有一个对象
var users = [
{ Mike: 'true' },
{ Tony: 'True' },
{ Ismael: 'RU' }
];
我有这个问题,我想要规范化我的对象,基本上替换" true"或" True"使用布尔值true
,其他任何内容都应为false
。
顺便说一句,users
的语法错误,Chrome告诉我users.constructor == Object
而不是Array
。
如何使用lodash实现这一目标?
答案 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;
答案 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块。