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

时间:2015-06-05 11:06:58

标签: javascript arrays clone

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

3 个答案:

答案 0 :(得分:2)

使用对象解析和属性简写

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

在性能方面,这是最有效的方法,是的。