【问题标题】:Parsing and Convert Data type into Json in javascript在javascript中解析和转换数据类型为Json
【发布时间】:2019-02-16 16:55:38
【问题描述】:

我有一个包含数组的变量,当我试图用 javascript console.log(res) 打印它时,显示如下:

res = [{sakti: "23"},{Baim: "20"},{Jaka: "18"}]

我想怎么做,如果我想把数据类型改成这样:

res = [{name: "sakti", y: 23},{name: "Baim", y: 20},{name: "Jaka", y: 18}]

我当前的代码:

this.categoryservice.getRole().subscribe((res)=>{
  console.log(res);
})

【问题讨论】:

    标签: javascript arrays json


    【解决方案1】:

    您可以使用mapObject.keys

    let res = [{sakti: "23"},{Baim: "20"},{Jaka: "18"}]
    
    let op = res.map(e=>{
      let key = Object.keys(e)[0]
      return { name: key, y: +e[key] }
    })
    
    console.log(op)

    【讨论】:

    • 是的,谢谢@Code Maniac 先生,但是如何将带双引号的字符串数字转换为不带双引号的整数?
    • 你可以通过parseInt或隐式转换来做。查看y 属性值中的+ 我添加了它以隐式转换为数字
    • @tonjel “但是如何将带双引号的字符串数字转换为不带双引号的整数” 该查询与原始问题有何关系?
    • 完美先生@CodeManiac,谢谢它的帮助。所以它确实需要 +
    • @tonjel 是的,但我建议您阅读更多关于字符串到数字转换的信息,从长远来看这将有所帮助,如果它帮助并解决了您的问题,请考虑将答案标记为正确
    【解决方案2】:

    您可以使用Array.mapObject.entries 和解构赋值来做到这一点:

    const data = [{sakti: "23"}, {Baim: "20"}, {Jaka: "18"}];
    
    const result = data.map(item => {
      const [key, value] = Object.entries(item)[0];
      return { name: key, y: value };
    });
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      Array.from 是使用第二个映射参数将对象数组映射到新对象数组的另一种方法。 Object.keys & Object.values 可用于构造新对象,方法是从键数组中获取 [0] 位置,这将是 name[0] 从值数组中获取,这将是 y 键。

      const res = [{sakti: "23"},{Baim: "20"},{Jaka: "18"}]
      const arrayConv = Array.from(res, obj => { return {"name":Object.keys(obj)[0], "y":Object.values(obj)[0] } });
      console.log(arrayConv);

      【讨论】:

        【解决方案4】:

        您可以为此使用mapobject.entries

         var res = [{sakti: "23"},{Baim: "20"},{Jaka: "18"}]
        
         var result = res.map((i)=>{
                let obj = Object.entries(i);
                return {'name': obj[0][0], 'y': obj[0][1]};
            });
        console.log(result);
        

        【讨论】:

          【解决方案5】:

          使用新的实验性flatMap(),您可以创建一个通用方法(如果您的一个对象有多个key:val 对):

          const res = [{sakti: "23", foo: "33"},{Baim: "20"},{Jaka: "18"}];
          
          let mapped = res.flatMap(o => Object.entries(o).map(([k, v]) => ({name: k, y: +v})));
          
          console.log(mapped);

          但是,您也可以随时使用reduce()

          const res = [{sakti: "23", foo: "33"},{Baim: "20"},{Jaka: "18"}];
          
          let mapped = res.reduce(
              (acc, o) => acc.concat(Object.entries(o).map(([k, v]) => ({name: k, y: +v}))),
              []
          );
          
          console.log(mapped);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-02
            • 2019-07-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-12
            相关资源
            最近更新 更多