javascript中从一个对象取部分属性给另一个对象

有一个很多属性的对象,我想取出其中部分属性给另一个对象,用了ES6的解构和对象的简写,发现还是有点蠢,需要的属性还是需要写两遍,想问问有没有更好的办法?

var obj = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5
}
var {a, d, e} = obj
var obj2 = {a, d, e}    
阅读 31.7k
3 个回答

没有什么更简单的办法了。。。
自己封装个方法吧。。

const pick = (obj, arr) =>
    arr.reduce((iter, val) => (val in obj && (iter[val] = obj[val]), iter), {});
    
let obj2 = pick(obj, ['a', 'd', 'e'])

lodash里有个类似的:_.pick方法

可以通过解构赋值实现,参考解构赋值

let obj = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5
}
let {b, c, ...obj2} = obj
console.log(obj2); // {a: 1, d: 4, e: 5}

更好的 extend() 函数详见 JavaScript权威指南-第6版

var obj = {
    a: 1,
    b: 2,
    c: 3,
    d: 4,
    e: 5
};

function extend(obj) {
    var o = {},
        attr = Array.prototype.slice.call(arguments).slice(1);

    attr.forEach(function(val, index) {
        if (val in obj) { o[val] = obj[val]; }
    });

    return o;

}

console.log(extend(obj, 'c', 'b')); //{ c: 3, b: 2 }
推荐问题
宣传栏