我有以下JS代码:
let obj1 = {
prop1: 1,
prop2: 2,
prop3: 3,
prop4: 4
}
let obj2 = {
prop1: obj1.prop1,
prop2: obj1.prop2,
}
在这里,我创建obj2
了具有某些选择属性的obj1
. 有没有比我在这里做的更干净/更快的方法来做到这一点?某种解构黑客?
我有以下JS代码:
let obj1 = {
prop1: 1,
prop2: 2,
prop3: 3,
prop4: 4
}
let obj2 = {
prop1: obj1.prop1,
prop2: obj1.prop2,
}
在这里,我创建obj2
了具有某些选择属性的obj1
. 有没有比我在这里做的更干净/更快的方法来做到这一点?某种解构黑客?
你可以这样做,
let obj1 = {
prop1: 1,
prop2: 2,
prop3: 3,
prop4: 4
}
let obj2 = JSON.parse(JSON.stringify(obj1,['prop1','prop2']))
console.log(obj2)
let obj1 = {
prop1: 1,
prop2: 2,
prop3: 3,
prop4: 4
}
let { prop1, prop2 } = obj1
let obj2 = {
prop1,
prop2
}
console.log(obj2)
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方式执行此操作
您好尝试将所有 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)
您可以使用我创建的实用程序函数来做到这一点。
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>
挑选文件