首页 > 解决方案 > 如何在javascript中按类型修改现有数组对象

问题描述

我想知道如何在javascript中按类型修改数组对象,我有一个对象,如果只有数组更改为如下所示的字段类型(忽略始终是最后一个元素的图像)在javascript中

function modifyObject(ob){
  var result = ob.map(e=>{
    Array.isArray(e.fields) ? e.fields.map(i=>({i:i}) :  
    Object.assign({}, ...ob.map(elm=>(elm.fields)));
  }
  )
}
var r1 = this.modifyObject(obj1);
var r2 = this.modifyObject(obj2);
var obj1=[
  {
    fields: {"cn":"IN"},
    id: 0,
    group: "Active"
  }
]

var obj2 =[
  {
    fields: ["city","name","img.jpg"],
    id: 0,
    group: "Active"
  }
]

预期输出:

//if fields type is array
  {
    fields: {city:"city", name:"name"}  
  }

//if fields type is object 
  {
    fields: {"cn":"IN"}
  }

标签: javascriptarraysobject

解决方案


问题是您的 obj1 和 obj2 不是对象,它们是数组,每个都包含一个对象。modifiedObj 必须接收 myObj[0],或者您可以像我一样修改它:

function modifyObject(myObj) {
  let modifiedObj = myObj;
  if (Array.isArray(modifiedObj.fields)) {
    let objFields = {};
    modifiedObj.fields.forEach(field => objFields[field] = field);
    modifiedObj.fields = objFields;
  }
  return modifiedObj; 
}

var obj1 = {
  fields: {"cn":"IN"},
  id    : 0,
  group : "Active"
};
var obj2 = {
  fields: ["city","name","img.jpg"],
  id    : 0,
  group : "Active"
};

var r2 = modifyObject(obj2);
console.log(r2);

如果不清楚,请告诉我。如果有帮助,请给我一个 +rep。


推荐阅读