具有属性子集的对象数组克隆

Object array clone with subset of properties

在 JavaScript 中将统一对象数组克隆为每个对象具有属性子集的数组的最有效方法是什么?

更新

这是最有效的方法还是有更好的方法? -

var source = [
    {
        id: 1,
        name: 'one',
        value: 12.34
    },
    {
        id: 2,
        name: 'two',
        value: 17.05
    }
];

// copy just 'id' and 'name', ignore 'value':
var dest = source.map(function (obj) {
    return {
        id: obj.id,
        name: obj.name
    };
});

首先定义一个克隆对象和return属性子集的函数,

Object.prototype.pick = function (props) {
   return  props.reduce((function (obj, property) {
        obj[property] = this[property];
        return obj;
   }).bind(this), {});
}

然后定义一个克隆数组的函数和return每个对象的子集

function  cloneArray (array, props) { 
    return array.map(function (obj) { 
       return obj.pick(props);
    });
}

现在假设你有这个数组:

var array = [
   { name : 'khalid', city : 'ifrane', age : 99 },
   { name : 'Ahmed', city : 'Meknes', age : 30 }
];

您需要调用该函数并传递您需要获取的属性数组作为结果

cloneArray(array, ['name', 'city']);

结果将是:

[
   { name : 'khalid', city : 'ifrane' },
   { name : 'Ahmed', city : 'Meknes' }
]

就性能而言,这将是最有效的方法,是的。

使用对象解构和属性Shorthand

let array = [{ a: 5, b: 6, c: 7 }, { a: 8, b: 9, c: 10 }];
let cloned = array.map(({ a, c }) => ({ a, c }));

console.log(cloned); // [{ a: 5, c: 7 }, { a: 8, c: 10 }]