Javascript:是否有一种更干净的方法来提取对象属性?

时间:2020-06-06 03:51:45

标签: javascript javascript-objects jsobject object-destructuring

我有以下JS代码:

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

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

在这里,我创建具有obj2的某些选择属性的obj1。有比我在这里做的更干净/更快的方法吗?某种破坏性的骇客?

5 个答案:

答案 0 :(得分:3)

您可以这样做

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

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

答案 1 :(得分: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)

答案 2 :(得分:0)

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

let { prop1, prop2 } = obj1

let obj2 = {
    prop1,
    prop2
}

console.log(obj2)

答案 3 :(得分: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 方式

执行此操作

答案 4 :(得分: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>

pick的文档