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

Javascript 具有属性子集的对象数组克隆,javascript,arrays,clone,Javascript,Arrays,Clone,在JavaScript中,将统一对象数组克隆为一个包含每个对象属性子集的数组最有效的方法是什么 更新 这是最有效的方法还是有更好的方法 var source = [ { id: 1, name: 'one', value: 12.34 }, { id: 2, name: 'two', value: 17.05 } ]; // copy just 'id' and 'n

在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
    };
});

首先定义一个克隆对象并返回属性子集的函数

Object.prototype.pick = function (props) {
   return  props.reduce((function (obj, property) {
        obj[property] = this[property];
        return obj;
   }).bind(this), {});
}
然后定义一个克隆数组并返回每个对象子集的函数

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' }
]

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

使用对象解构和属性速记

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 }]

可能是@artm的重复,这个问题是关于一个对象的,而我问的是一个对象数组。@Khalid,这个问题不包括属性的子集。好吧,你可以举个例子,对数组中的每个对象调用它。这个答案比我要找的更一般,也就是说,我不介意在复制操作期间指定列。您的答案更易于重复使用和清洁。非常感谢。非常感谢。在第一个答案之后,我做了一个更新,这提供了一个非常好和更通用的方法。