2

我有以下JS代码:

let obj1 = {
    prop1: 1,
    prop2: 2,
    prop3: 3,
    prop4: 4
}

let obj2 = {
    prop1: obj1.prop1,
    prop2: obj1.prop2,
}

在这里,我创建obj2了具有某些选择属性的obj1. 有没有比我在这里做的更干净/更快的方法来做到这一点?某种解构黑客?

4

5 回答 5

3

你可以这样做,

let obj1 = {
    prop1: 1,
    prop2: 2,
    prop3: 3,
    prop4: 4
}

let obj2 = JSON.parse(JSON.stringify(obj1,['prop1','prop2']))
console.log(obj2)

于 2020-06-06T04:07:12.507 回答
0

let obj1 = {
    prop1: 1,
    prop2: 2,
    prop3: 3,
    prop4: 4
}

let { prop1, prop2 } = obj1

let obj2 = {
    prop1,
    prop2
}

console.log(obj2)

于 2020-06-06T04:19:45.007 回答
0

JSON.stringify方式很好,但不适用于功能。所以,如果你的对象中有函数,最好这样做:

let obj1 = {
    prop1: function(x){console.log("hello", x)},
    prop2: 2,
    prop3: 3,
    prop4: 4
}

const keysForObj2 = ["prop1", "prop2"]

let obj2 = {};

for (key in obj1) {
    if (keysForObj2.includes(key)) {
        obj2[key] = obj1[key];
    }
}
console.log(obj2);    // Only prop2 will be present with JSON way

obj2.prop1("world"); 您不能以JSON方式执行此操作

于 2020-06-06T04:20:25.813 回答
0

您好尝试将所有 obj1 属性存储到 obj2。可能会帮助你。

let obj1 = {
    prop1: 1,
    prop2: 2,
    prop3: 3,
    prop4: 4
}
//ES6
let obj2 = {}
for(key in obj1){
  obj2[key]= obj1[key]
}
console.log(obj2)
//ES5
let obj3 = {}
Object.keys(obj1).forEach(function(key){
  obj3[key]= obj1[key]
})
console.log(obj2)

于 2020-06-06T04:13:45.920 回答
0

您可以使用我创建的实用程序函数来做到这一点。

let obj1 = {
  prop1: 1,
  prop2: 2,
  prop3: 3,
  prop4: 4
}

const { pick } = rubico

const obj2 = pick(['prop1', 'prop2'])(obj1)

console.log(obj2)
<script src="https://unpkg.com/rubico/index.js"></script>

挑选文件

于 2020-06-06T04:23:25.610 回答