Javascript 递归函数未正确计算对象中的键
我有两个物体,长度相同,钥匙相同。唯一的区别是这些键可能具有不同的值。问题是,应该对这两个对象求值的方法都失败了——我花了好几个小时试图弄明白这一点 以下是原始参考资料:Javascript 递归函数未正确计算对象中的键,javascript,vue.js,Javascript,Vue.js,我有两个物体,长度相同,钥匙相同。唯一的区别是这些键可能具有不同的值。问题是,应该对这两个对象求值的方法都失败了——我花了好几个小时试图弄明白这一点 以下是原始参考资料: { "id":68, "article_id":12338, "article_reference_id":68, "article_reference_extraction_id":667320, "user_id":null, "file":"1238-230180-1-CE.doc
{
"id":68,
"article_id":12338,
"article_reference_id":68,
"article_reference_extraction_id":667320,
"user_id":null,
"file":"1238-230180-1-CE.doc",
"revision":1,
"order":1,
"type":"journal",
"preview":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: a systematic review. Patient Educ Couns 2012 Jan; 86(1):9-18",
"status":1,
"source":"Unknown",
"data":{
"pii":"S0738-3991(11)00114-5",
"webciteId":null,
"publication":[
],
"conference":[
],
"authors":[
{
"firstName":"B",
"lastName":"Chewning"
},
{
"firstName":"CL",
"lastName":"Bylund"
},
{
"firstName":"B",
"lastName":"Shah"
},
{
"firstName":"NK",
"lastName":"Arora"
},
{
"firstName":"JA",
"lastName":"Gueguen"
},
{
"firstName":"G",
"lastName":"Makoul"
}
],
"editors":[
{
"firstName":"G",
"lastName":"Makoul"
}
],
"comments":[
],
"source":{
"title":"Patient Educ Couns",
"date":{
"year":"2012",
"month":"01",
"day":null
},
"pages":{
"from":"9",
"to":"18"
},
"volume":"86",
"issue":"1",
"url":"http://europepmc.org/abstract/MED/21474265"
},
"accessDate":null,
"articleTitle":"Patient preferences for shared decisions: a systematic review"
},
"doi":"10.1016/j.pec.2011.02.004",
"pmid":21474265,
"pmcid":null,
"isbn":"",
"created_at":"2019-04-09 10:04:53",
"updated_at":"2019-04-09 10:04:53",
"deleted_at":null,
"max_revision":30,
"extraction":{
"id":667320,
"article_id":12338,
"file":"1238-230180-1-CE.doc",
"order":1,
"original":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: A systematic review. Patient Educ Couns [Internet] Elsevier Ireland Ltd; 2012;86(1):9?18. PMID:21474265",
"doi":null,
"pmid":null,
"isbn":null,
"parsed":1,
"created_at":"2019-02-25 18:40:46",
"updated_at":"2019-02-25 18:40:46",
"deleted_at":null
}
}
{
"id":68,
"article_id":12338,
"article_reference_id":68,
"article_reference_extraction_id":667320,
"user_id":null,
"file":"1238-230180-1-CE.doc",
"revision":1,
"order":1,
"type":"journal",
"preview":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: a systematic review. Patient Educ Couns 2012 Jan; 86(1):9-18",
"status":1,
"source":"Unknown",
"data":{
"pii":" ",
"webciteId":null,
"publication":[
],
"conference":[
],
"authors":[
{
"lastName":"Chewning",
"firstName":"Betty"
},
{
"lastName":"Bylund",
"firstName":"Carma L."
},
{
"lastName":"Shah",
"firstName":"Bupendra"
},
{
"lastName":"Arora",
"firstName":"Neeraj K."
},
{
"lastName":"Gueguen",
"firstName":"Jennifer A."
},
{
"lastName":null,
"firstName":" "
}
],
"editors":[
{
"firstName":"G",
"lastName":"Makoul"
}
],
"comments":[
],
"source":{
"title":"Patient Education and Counseling",
"date":{
"year":2012,
"month":1,
"day":null
},
"pages":{
"from":"9",
"to":"18"
},
"volume":"86",
"issue":"1",
"url":"http://europepmc.org/abstract/MED/21474265"
},
"accessDate":null,
"articleTitle":"Patient preferences for shared decisions: A systematic review"
},
"doi":"10.1016/j.pec.2011.02.004",
"pmid":21474265,
"pmcid":null,
"isbn":"",
"created_at":"2019-04-09 10:04:53",
"updated_at":"2019-04-09 10:04:53",
"deleted_at":null,
"max_revision":30,
"extraction":{
"id":667320,
"article_id":12338,
"file":"1238-230180-1-CE.doc",
"order":1,
"original":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: A systematic review. Patient Educ Couns [Internet] Elsevier Ireland Ltd; 2012;86(1):9?18. PMID:21474265",
"doi":null,
"pmid":null,
"isbn":null,
"parsed":1,
"created_at":"2019-02-25 18:40:46",
"updated_at":"2019-02-25 18:40:46",
"deleted_at":null
}
}
这里是
参考
:
{
"id":68,
"article_id":12338,
"article_reference_id":68,
"article_reference_extraction_id":667320,
"user_id":null,
"file":"1238-230180-1-CE.doc",
"revision":1,
"order":1,
"type":"journal",
"preview":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: a systematic review. Patient Educ Couns 2012 Jan; 86(1):9-18",
"status":1,
"source":"Unknown",
"data":{
"pii":"S0738-3991(11)00114-5",
"webciteId":null,
"publication":[
],
"conference":[
],
"authors":[
{
"firstName":"B",
"lastName":"Chewning"
},
{
"firstName":"CL",
"lastName":"Bylund"
},
{
"firstName":"B",
"lastName":"Shah"
},
{
"firstName":"NK",
"lastName":"Arora"
},
{
"firstName":"JA",
"lastName":"Gueguen"
},
{
"firstName":"G",
"lastName":"Makoul"
}
],
"editors":[
{
"firstName":"G",
"lastName":"Makoul"
}
],
"comments":[
],
"source":{
"title":"Patient Educ Couns",
"date":{
"year":"2012",
"month":"01",
"day":null
},
"pages":{
"from":"9",
"to":"18"
},
"volume":"86",
"issue":"1",
"url":"http://europepmc.org/abstract/MED/21474265"
},
"accessDate":null,
"articleTitle":"Patient preferences for shared decisions: a systematic review"
},
"doi":"10.1016/j.pec.2011.02.004",
"pmid":21474265,
"pmcid":null,
"isbn":"",
"created_at":"2019-04-09 10:04:53",
"updated_at":"2019-04-09 10:04:53",
"deleted_at":null,
"max_revision":30,
"extraction":{
"id":667320,
"article_id":12338,
"file":"1238-230180-1-CE.doc",
"order":1,
"original":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: A systematic review. Patient Educ Couns [Internet] Elsevier Ireland Ltd; 2012;86(1):9?18. PMID:21474265",
"doi":null,
"pmid":null,
"isbn":null,
"parsed":1,
"created_at":"2019-02-25 18:40:46",
"updated_at":"2019-02-25 18:40:46",
"deleted_at":null
}
}
{
"id":68,
"article_id":12338,
"article_reference_id":68,
"article_reference_extraction_id":667320,
"user_id":null,
"file":"1238-230180-1-CE.doc",
"revision":1,
"order":1,
"type":"journal",
"preview":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: a systematic review. Patient Educ Couns 2012 Jan; 86(1):9-18",
"status":1,
"source":"Unknown",
"data":{
"pii":" ",
"webciteId":null,
"publication":[
],
"conference":[
],
"authors":[
{
"lastName":"Chewning",
"firstName":"Betty"
},
{
"lastName":"Bylund",
"firstName":"Carma L."
},
{
"lastName":"Shah",
"firstName":"Bupendra"
},
{
"lastName":"Arora",
"firstName":"Neeraj K."
},
{
"lastName":"Gueguen",
"firstName":"Jennifer A."
},
{
"lastName":null,
"firstName":" "
}
],
"editors":[
{
"firstName":"G",
"lastName":"Makoul"
}
],
"comments":[
],
"source":{
"title":"Patient Education and Counseling",
"date":{
"year":2012,
"month":1,
"day":null
},
"pages":{
"from":"9",
"to":"18"
},
"volume":"86",
"issue":"1",
"url":"http://europepmc.org/abstract/MED/21474265"
},
"accessDate":null,
"articleTitle":"Patient preferences for shared decisions: A systematic review"
},
"doi":"10.1016/j.pec.2011.02.004",
"pmid":21474265,
"pmcid":null,
"isbn":"",
"created_at":"2019-04-09 10:04:53",
"updated_at":"2019-04-09 10:04:53",
"deleted_at":null,
"max_revision":30,
"extraction":{
"id":667320,
"article_id":12338,
"file":"1238-230180-1-CE.doc",
"order":1,
"original":"Chewning B, Bylund CL, Shah B, Arora NK, Gueguen JA, Makoul G. Patient preferences for shared decisions: A systematic review. Patient Educ Couns [Internet] Elsevier Ireland Ltd; 2012;86(1):9?18. PMID:21474265",
"doi":null,
"pmid":null,
"isbn":null,
"parsed":1,
"created_at":"2019-02-25 18:40:46",
"updated_at":"2019-02-25 18:40:46",
"deleted_at":null
}
}
注意originalReference
中的article title
如何有打字错误,但是reference
中的article title
有正确的标题
下面函数的要点是确保如果originalReference
以前有一个键的非空/非空/定义值,reference
不应覆盖originalReference
中的值
这是一个函数,它同时计算这两个参数
发生的情况是,它抛出了一个错误TypeError:无法读取未定义的属性'articleTitle'。不知道发生了什么
以下是函数:
evaluateEmptyValues: function(reference, originalReference) {
var vm = this;
console.log('reference', reference);
console.log('Before --> ' + reference.data.articleTitle);
// Get keys and values of both reference objects
referenceLength = Object.entries(reference).length;
originalReferenceLength = Object.entries(originalReference).length;
if (referenceLength == originalReferenceLength) {
try {
for (var prop in reference) {
if (reference[prop] != undefined || reference[prop] != null) {
if (typeof (reference[prop]) == 'string' && reference[prop].trim() == '') {
reference[prop] = originalReference[prop];
}
if (typeof(reference[prop]) == 'object' && typeof(originalReference[prop]) == 'object') {
console.log('reference[prop]', reference[prop]);
console.log('originalReference[prop]', originalReference);
vm.evaluateEmptyValues(reference[prop], originalReference[prop]);
}
if (Array.isArray(reference[prop]) && typeof Array.isArray(originalReference[prop])) {
reference[prop].forEach((item, index) => vm.evaluateEmptyValues(item, originalReference[prop][index]));
}
} else {
reference[prop] = originalReference[prop];
}
}
} catch(err) {
console.log(err);
}
}
console.log('After --> ' + reference.data.articleTitle);
//
// console.log('Original --> ' + originalReference.data.articleTitle);
}
难道你不该排队吗
if (reference[prop] != undefined || reference[prop] != null) {
用一个和,像这样
if (reference[prop] != undefined && reference[prop] != null) {
让它和这个一起工作:
evaluateEmptyValues: function(reference, originalReference) {
var vm = this;
// Get keys and values of both reference objects
referenceLength = Object.entries(reference).length;
originalReferenceLength = Object.entries(originalReference).length;
if (referenceLength == originalReferenceLength) {
try {
for (var prop in reference) {
if (reference[prop] != undefined || reference[prop] != null) {
if (typeof (reference[prop]) == 'string' && reference[prop].trim() == '') {
reference[prop] = originalReference[prop];
}
if (typeof(reference[prop]) == 'object' && typeof(originalReference[prop]) == 'object') {
var length = Object.keys(reference[prop]).length;
for (var property in reference[prop]) {
if (originalReference[prop][property] != undefined) {
if (originalReference[prop][property] != null) {
// vm.evaluateEmptyValues(reference[prop][property], originalReference[prop][property]);
for (var i = 0; i < property.length; i++) {
if ((reference[prop][property] == null || reference[prop][property] == '') &&
originalReference[prop][property] != null) {
reference[prop][property] = originalReference[prop][property];
}
}
}
}
}
}
if (Array.isArray(reference[prop]) && typeof Array.isArray(originalReference[prop])) {
reference[prop].forEach((item, index) => vm.evaluateEmptyValues(item, originalReference[prop][index]));
}
} else {
if (originalReference[prop] != undefined) {
if (originalReference[prop] != null) {
reference[prop] = originalReference[prop];
}
}
}
}
} catch(err) {
console.log(err);
}
}
},
evaluatemptyvalues:函数(引用,原始引用){
var vm=这个;
//获取两个参照对象的键和值
referenceLength=Object.entries(reference).length;
originalReferenceLength=Object.entries(originalReference).length;
if(referenceLength==原始referenceLength){
试一试{
for(参考中的var prop){
if(reference[prop]!=未定义| | reference[prop]!=null){
if(typeof(reference[prop])='string'&&reference[prop].trim(){
参考[prop]=原始参考[prop];
}
if(typeof(reference[prop])==“object”&&typeof(originalReference[prop])==“object”){
变量长度=Object.keys(参考[prop]).length;
for(引用[prop]中的var属性){
if(原始引用[prop][property]!=未定义){
if(原始引用[prop][property]!=null){
//vm.EvaluateEmptyValue(参考[prop][property],原始参考[prop][property]);
对于(变量i=0;ivm.evaluatemptyvalues(项目,原始引用[prop][index]);
}
}否则{
if(原始参考[prop]!=未定义){
if(原始引用[prop]!=null){
参考[prop]=原始参考[prop];
}
}
}
}
}捕捉(错误){
控制台日志(err);
}
}
},
您希望最终得到什么?您是否正在尝试重复合并?因为有和没有,因为如果其中一个是真的,我希望它点击else
。可能reference[prop]==null
或reference[prop]==undefined
。。但是originalReference[prop]
可能不是,所以我想分配reference[prop]=originalReference[prop]代码>。如果originalReference[prop]==null | | | originalReference[prop]==undefined
,那也没关系——没有任何变化