有没有办法如何从对象中选择属性到不同键下的新对象?
E.g:
has_add_permission and not is_popup and
(not save_as or add) and can_save
答案 0 :(得分:2)
您可以使用Array.reduce()
与Object.entries()
一起创建pickAs()
方法:
const a = {prop1: 'a', prop2: 'b', prop3: 'c'}
const pickAs = (obj, props) =>
Object.entries(obj)
.reduce((r, [k, v]) => {
if(k in props) r[props[k]] = v;
return r;
}, {});
const result = pickAs(a, {prop1: 'first', prop3: 'second'});
console.log(result) // {first: 'a', second: 'c'}

答案 1 :(得分:0)
您可以使用lodash _.mapKeys
方法在您从对象中选择密钥后重命名密钥。据我所知,没有方法可以同时做到这两点,但这很有效:
const a = {prop1: 'a', prop2: 'b', prop3: 'c'}
const result = _.mapKeys(_.pick(a, ["prop1", "prop3"]), (v, k) => k.endsWith("1") ? "first" : "second");
console.log(result);

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
&#13;
您希望使用适合您实际用例的函数替换mapKeys
第二个参数。该函数使用两个参数调用:值和键,并应返回所需的新键。