如何克隆一个对象但只有一些 key/values?
How to clone an object but with only some key/values?
我有一个看起来像这样的对象:
{
createdAt: "2016-01-25T04:01:53.282Z"
index: 0
objectId: "56a59e31a633bd0257868cb8"
panoDataRotate: 0
roomModelId: "56a59e242e958a00596a897c"
x: 240
y: 230
}
我想将它克隆到一个只有索引的对象中,
x, and
y`:
{
index: 0
x: 240
y: 230
}
如何用 lodash/Underscore 做到这一点?
有了 lodash,你可以使用这个:
var obj = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
};
var newObject = _.pick(obj, ['index', 'x', 'y']);
请参阅 here _.pick()
函数的文档。
还有一个简单的 JavaScript 解决方案:
var obj = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
};
var newObject = ['index', 'x', 'y'].reduce(function(result, key) {
result[key] = obj[key];
return result;
}, {});
for-in 数据
您可以使用 for-in
循环对象的属性。
var data = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
}
var allowedKeys = ["x", "y", "index"];
var result = {};
for (var key in data){
if(allowedKeys.indexOf(key)>-1){
result[key] = data[key];
}
}
console.log(result)
forEach over allowedKeys 数组
您还可以遍历允许的键数组以减少代码。
注意: 在这种方法中,如果 data
中不存在键,则 undefined
将分配给它。但是在之前的方法中,这个key会被插入。
出于演示目的,我在 allowedKeys
数组中添加了一个键 test
。
var data = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
}
var allowedKeys = ["x", "y", "index", "test"];
var result = {};
allowedKeys.forEach(function(key){
result[key] = data[key];
})
console.log(result)
我有一个看起来像这样的对象:
{
createdAt: "2016-01-25T04:01:53.282Z"
index: 0
objectId: "56a59e31a633bd0257868cb8"
panoDataRotate: 0
roomModelId: "56a59e242e958a00596a897c"
x: 240
y: 230
}
我想将它克隆到一个只有索引的对象中,
x, and
y`:
{
index: 0
x: 240
y: 230
}
如何用 lodash/Underscore 做到这一点?
有了 lodash,你可以使用这个:
var obj = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
};
var newObject = _.pick(obj, ['index', 'x', 'y']);
请参阅 here _.pick()
函数的文档。
还有一个简单的 JavaScript 解决方案:
var obj = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
};
var newObject = ['index', 'x', 'y'].reduce(function(result, key) {
result[key] = obj[key];
return result;
}, {});
for-in 数据
您可以使用 for-in
循环对象的属性。
var data = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
}
var allowedKeys = ["x", "y", "index"];
var result = {};
for (var key in data){
if(allowedKeys.indexOf(key)>-1){
result[key] = data[key];
}
}
console.log(result)
forEach over allowedKeys 数组
您还可以遍历允许的键数组以减少代码。
注意: 在这种方法中,如果 data
中不存在键,则 undefined
将分配给它。但是在之前的方法中,这个key会被插入。
出于演示目的,我在 allowedKeys
数组中添加了一个键 test
。
var data = {
createdAt: "2016-01-25T04:01:53.282Z",
index: 0,
objectId: "56a59e31a633bd0257868cb8",
panoDataRotate: 0,
roomModelId: "56a59e242e958a00596a897c",
x: 240,
y: 230
}
var allowedKeys = ["x", "y", "index", "test"];
var result = {};
allowedKeys.forEach(function(key){
result[key] = data[key];
})
console.log(result)