如何根据javascript的值类型更改对象?

如何根据javascript的值类型更改对象?,javascript,arrays,object,Javascript,Arrays,Object,如何在javascript中将嵌套对象更改为新对象 function newObj(obj1) { let map = {}; obj1.forEach(e => { let details = e.details; Object.values(details).forEach(value => { if (Array.isArray(value) && value.length > 0) { map[valu

如何在javascript中将嵌套对象更改为新对象

function newObj(obj1) {
  let map = {};
  obj1.forEach(e => {
    let details = e.details;
    Object.values(details).forEach(value => {
      if (Array.isArray(value) && value.length > 0) {
        map[value[0]] = value[0];
      }
      else if (typeof value === 'object') {
        Object.values(value).forEach(val => { map[val] = val; });
      }
    })
  });
  return map;
}

var obj1 = [
  {
    details : {
      "info"  : ["stocks", "finance", ""],
      "sales" : ["analytics"]
    }
  }
];
var obj2 = [
  {
    details : {
      "city" : "SG"
    }
  }
];
var r1 = this.newObj(obj1);
var r2 = this.newObj(obj2);
我有一个object
obj
,其中如果细节是数组,那么在javascript中取第一个数组值作为值

function newObj(obj1) {
  let map = {};
  obj1.forEach(e => {
    let details = e.details;
    Object.values(details).forEach(value => {
      if (Array.isArray(value) && value.length > 0) {
        map[value[0]] = value[0];
      }
      else if (typeof value === 'object') {
        Object.values(value).forEach(val => { map[val] = val; });
      }
    })
  });
  return map;
}

var obj1 = [
  {
    details : {
      "info"  : ["stocks", "finance", ""],
      "sales" : ["analytics"]
    }
  }
];
var obj2 = [
  {
    details : {
      "city" : "SG"
    }
  }
];
var r1 = this.newObj(obj1);
var r2 = this.newObj(obj2);
预期产量

//for obj1 (show only first value of array)
{
  info  : "stocks",
  sales : "analytics"
}
//obj2
{
  city : "SG"
}

我认为你把这件事复杂化了。看看下面的例子。逻辑是这样的:

  • 迭代
    详细信息
  • 如果键下的值是数组,则在
    映射中创建
    ,并分配
    值[0]
  • 如果键下的值不是数组,则只需将其值复制到
    映射中
  • 这就足够实现你想要的了

    函数newObj(obj){
    设map={};
    对象forEach(e=>{
    让细节=e.细节;
    Object.keys(细节).forEach(key=>{
    var值=详细信息[键];
    if(Array.isArray(value)和&value.length>0){
    map[key]=值[0];
    }否则{
    映射[键]=值;
    }
    });
    });
    返回图;
    }
    变量obj1=[
    {
    详情:{
    “信息”:[“股票”、“金融”、“信息”],
    “销售”:[“分析”]
    }
    }
    ];
    变量obj2=[
    {
    详情:{
    “城市”:“SG”
    }
    }
    ];
    var r1=新OBJ(obj1);
    var r2=新OBJ(obj2);
    控制台日志(r1);
    
    控制台日志(r2)我想你把这件事复杂化了。看看下面的例子。逻辑是这样的:

  • 迭代
    详细信息
  • 如果键下的值是数组,则在
    映射中创建
    ,并分配
    值[0]
  • 如果键下的值不是数组,则只需将其值复制到
    映射中
  • 这就足够实现你想要的了

    函数newObj(obj){
    设map={};
    对象forEach(e=>{
    让细节=e.细节;
    Object.keys(细节).forEach(key=>{
    var值=详细信息[键];
    if(Array.isArray(value)和&value.length>0){
    map[key]=值[0];
    }否则{
    映射[键]=值;
    }
    });
    });
    返回图;
    }
    变量obj1=[
    {
    详情:{
    “信息”:[“股票”、“金融”、“信息”],
    “销售”:[“分析”]
    }
    }
    ];
    变量obj2=[
    {
    详情:{
    “城市”:“SG”
    }
    }
    ];
    var r1=新OBJ(obj1);
    var r2=新OBJ(obj2);
    控制台日志(r1);
    
    控制台日志(r2)由于分解分配,这里有一个非常简洁的解决方案:

    函数newObj(obj){
    const[{details}]=obj;
    const entries=Object.entries(详细信息)
    .map(([key,value])=>([key,Array.isArray(value)→value[0]:value]);
    返回对象.fromEntries(entries);
    }
    
    实例:

    “严格使用”;
    函数newObj(obj){
    const[{details}]=obj;
    const entries=Object.entries(详细信息)
    .map(([key,value])=>([key,Array.isArray(value)→value[0]:value]);
    返回对象.fromEntries(entries);
    }
    常数obj1=[
    {
    详情:{
    信息:['股票','金融','',
    销售:[“分析”]
    }
    }
    ];
    常数obj2=[
    {
    详情:{
    城市:“SG”
    }
    }
    ];
    console.log(newObj(obj1));
    
    console.log(newObj(obj2))由于分解分配,这里有一个非常简洁的解决方案:

    函数newObj(obj){
    const[{details}]=obj;
    const entries=Object.entries(详细信息)
    .map(([key,value])=>([key,Array.isArray(value)→value[0]:value]);
    返回对象.fromEntries(entries);
    }
    
    实例:

    “严格使用”;
    函数newObj(obj){
    const[{details}]=obj;
    const entries=Object.entries(详细信息)
    .map(([key,value])=>([key,Array.isArray(value)→value[0]:value]);
    返回对象.fromEntries(entries);
    }
    常数obj1=[
    {
    详情:{
    信息:['股票','金融','',
    销售:[“分析”]
    }
    }
    ];
    常数obj2=[
    {
    详情:{
    城市:“SG”
    }
    }
    ];
    console.log(newObj(obj1));
    
    console.log(newObj(obj2))@Teemu我已经更新了代码,感谢您在
    obj1
    &
    obj2
    之后回复
    r1
    &
    r2
    ?为什么
    这个。
    obj2
    无效。什么是
    {“SG”}
    ?你的意思是
    [“SG”]
    ?@iAmOren感谢您的回复,已更新code@Teemu我已经更新了代码,感谢您在
    obj1
    &
    obj2
    之后回复
    r1
    &
    r2
    ?为什么
    这个。
    obj2
    无效。什么是
    {“SG”}
    ?你是说
    [“SG”]
    ?@iAmOren感谢您的回复,更新了代码