Javascript向下投射对象
我想知道是否有一种本地方式来向下投射对象 我的意思是,如果我有这样一个对象:Javascript向下投射对象,javascript,javascript-objects,downcast,Javascript,Javascript Objects,Downcast,我想知道是否有一种本地方式来向下投射对象 我的意思是,如果我有这样一个对象:person1={name:'Doe',age:25} 和其他类似的:person2={name:'} 是否有一些函数可用于执行以下操作:var person=someFunction(person2,person1)和getperson={name:'Doe'} 或者是否有一种使用原型的方法 谢谢。您知道要删除的属性的名称吗?如果是这样,为什么不删除对象上的特定关键点 var person1={ 名称:“Doe”,
person1={name:'Doe',age:25}代码>
和其他类似的:person2={name:'}代码>
是否有一些函数可用于执行以下操作:var person=someFunction(person2,person1)
和getperson={name:'Doe'}
或者是否有一种使用原型的方法
谢谢。您知道要删除的属性的名称吗?如果是这样,为什么不删除对象上的特定关键点
var person1={
名称:“Doe”,
年龄:25
};
删除人员1[‘年龄’];
控制台日志(person1)代码>您知道要删除的属性的名称吗?如果是这样,为什么不删除对象上的特定关键点
var person1={
名称:“Doe”,
年龄:25
};
删除人员1[‘年龄’];
控制台日志(person1)代码>您可以编写一个函数,从对象中去除额外的属性
function removeextraproperty(interf,obj){
让interfaceKeys=Object.keys(interf);
用于(输入obj){
如果(!obj.hasOwnProperty(键)){
//确保我们不剥离继承的属性
//如果需要,请删除此项
继续;
}
如果(!接口键包括(键)){
删除obj[key];
}
}
}
让person={firstName:''};
让bob={firstName:'bob',lastName:'Smith'};
移除额外财产(人、鲍勃);
控制台日志(bob)代码>您可以编写一个函数,从对象中去除额外的属性
function removeextraproperty(interf,obj){
让interfaceKeys=Object.keys(interf);
用于(输入obj){
如果(!obj.hasOwnProperty(键)){
//确保我们不剥离继承的属性
//如果需要,请删除此项
继续;
}
如果(!接口键包括(键)){
删除obj[key];
}
}
}
让person={firstName:''};
让bob={firstName:'bob',lastName:'Smith'};
移除额外财产(人、鲍勃);
控制台日志(bob)代码>当然,这样的函数存在:
功能过滤器bj(p2,p1){
返回Object.keys(p2).reduce(函数(build,el){
构建[el]=p1[el];
返回构建;
}, {});
}
person1={姓名:'Doe',年龄:25};
person2={name:''};
日志(filterObj(person2,person1))代码>当然,这样的函数存在:
功能过滤器bj(p2,p1){
返回Object.keys(p2).reduce(函数(build,el){
构建[el]=p1[el];
返回构建;
}, {});
}
person1={姓名:'Doe',年龄:25};
person2={name:''};
日志(filterObj(person2,person1))代码>我不太确定下行的概念,但为此我想我会使用enumerable属性:
"use strict"
let person1 = { name: 'Doe', age: 25 }
let person2 = { name: '' }
for (let key in person1) {
if (!person2.hasOwnProperty(key)) {
Object.defineProperty(person1, key, { enumerable: false })
}
}
let person = Object.assign(person2, person1)
console.log(person) // { name: 'Doe' }
正如其他答案中所建议的那样,有很多方法可以做到这一点,如果您需要的话,您当然可以将其制作成原型
编辑:
我意识到我的第一次尝试根本不是很好,因为它改变了初始对象。
我利用这一点使其更简单:
let Person = function() {}
Person.prototype.downcast = function (p1, p2) {
let c = {}
for (let k in p1) {
if (p2.hasOwnProperty(k)) {
c[k] = p1[k]
}
}
return c
}
let person = new Person().downcast(person1, person2)
console.log(person) // { name: 'Doe' }
我不太确定downcast的概念,但为此我想我会使用enumerable属性:
"use strict"
let person1 = { name: 'Doe', age: 25 }
let person2 = { name: '' }
for (let key in person1) {
if (!person2.hasOwnProperty(key)) {
Object.defineProperty(person1, key, { enumerable: false })
}
}
let person = Object.assign(person2, person1)
console.log(person) // { name: 'Doe' }
正如其他答案中所建议的那样,有很多方法可以做到这一点,如果您需要的话,您当然可以将其制作成原型
编辑:
我意识到我的第一次尝试根本不是很好,因为它改变了初始对象。
我利用这一点使其更简单:
let Person = function() {}
Person.prototype.downcast = function (p1, p2) {
let c = {}
for (let k in p1) {
if (p2.hasOwnProperty(k)) {
c[k] = p1[k]
}
}
return c
}
let person = new Person().downcast(person1, person2)
console.log(person) // { name: 'Doe' }
你为什么还要“沮丧”它?对象是否具有额外属性是否重要?是的,这很重要。我正在使用IBM BPM框架定义的类型分配一个变量。如果我有额外的属性,它会说这些属性没有在数据类型中定义。@JosueGarcia,那么如果有额外的数据,框架会抛出一个错误吗?如果没有,就没有理由剥离额外的属性。如果是这样,我在下面给出了答案。这是家庭作业,不是吗。因为在过去的cpl日子里,我看到了2到3个相同的问题。我只是在搜索中找不到他们。你为什么还要“沮丧”呢?对象是否具有额外属性是否重要?是的,这很重要。我正在使用IBM BPM框架定义的类型分配一个变量。如果我有额外的属性,它会说这些属性没有在数据类型中定义。@JosueGarcia,那么如果有额外的数据,框架会抛出一个错误吗?如果没有,就没有理由剥离额外的属性。如果是这样,我在下面给出了答案。这是家庭作业,不是吗。因为在过去的cpl日子里,我看到了2到3个相同的问题。我只是在搜索中找不到它们。我只是不鼓励使用interface
作为参数名,因为它是JS中未来保留的关键字。虽然目前还没有真正的用例,但至少现在我不鼓励使用interface
作为参数名,因为它是JS中未来保留的关键字。不过,至少目前还没有真正的用例