Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript向下投射对象_Javascript_Javascript Objects_Downcast - Fatal编程技术网

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)
和get
person={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中未来保留的关键字。不过,至少目前还没有真正的用例