微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更改依赖于值类型javascript的对象?

如何解决如何更改依赖于值类型javascript的对象?

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

我有一个对象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"
}

解决方法

我认为您过于复杂了。看下面的例子。逻辑是这样的:

  1. 遍历details
  2. 如果 key 下的 value 是一个数组,则在key中创建map并分配value[0]
  3. 如果 key 下的 value 不是数组,则只需将其值复制到map

这足以实现您想要的。

function newObj(obj){
  let map = {};
  obj.forEach(e => {
    let details = e.details;
    Object.keys(details).forEach(key => {
      var value = details[key];
      if (Array.isArray(value) && value.length > 0){
        map[key] = value[0];
      } else {
        map[key] = value;
      }
    });
  });
  return map;
}

var obj1 = [
  {
    details: {
      "info":["stocks","finance",""],"sales":["analytics"]
    }
  }
];

var obj2 = [
  {
    details: {
        "city":"SG"
    }
  }
];

var r1 = newObj(obj1);
var r2 = newObj(obj2);

console.log(r1);
console.log(r2);

,

这是一个非常简洁的解决方案,这要归功于解构任务:

function newObj(obj) {
    const [{ details }] = obj;
    const entries = Object.entries(details)
        .map(([key,value]) => ([key,Array.isArray(value) ? value[0] : value]));
    return Object.fromEntries(entries);
}

实时示例:

'use strict';

function newObj(obj) {
    const [{ details }] = obj;
    const entries = Object.entries(details)
        .map(([key,Array.isArray(value) ? value[0] : value]));
    return Object.fromEntries(entries);
}

const obj1 = [
    {
        details: {
            info: ['stocks','finance',''],sales: ['analytics']
        }
    }
];

const obj2 = [
    {
        details: {
            city: 'SG'
        }
    }
];

console.log(newObj(obj1));
console.log(newObj(obj2));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。