【问题标题】:How can I convert an array to an object by splitting strings?如何通过拆分字符串将数组转换为对象?
【发布时间】:2020-02-18 19:53:46
【问题描述】:

我有一个如下的数组:

["gender-m", "age-20", "city-london", "lang-en", "support-home"]

我尝试生成一个 JSON 对象:

{"gender":"m", "age":"20", "city":"london", "lang":"en", "support":"home"}

我能想到的一个解决方案是使用 FOR 循环来实现它,但我确信对此有优雅的解决方案。任何建议,请帮助我。

【问题讨论】:

  • 可以使用Array.reduce

标签: javascript arrays json lodash


【解决方案1】:

您可以将Object.fromEntries 与拆分的键/值对一起使用。

var data = ["gender-m", "age-20", "city-london", "lang-en", "support-home"],
    result = Object.fromEntries(data.map(s => s.split('-')));

console.log(result);

【讨论】:

  • 谢谢,@Nina,我将其标记为答案,因为它是第一个响应、有效且优雅的方式:)。但该主题仍然欢迎最佳实践。
【解决方案2】:

我认为没有一种优雅的方式,因为您使用“-”符号来分隔键和值。所以,最好的办法是:

let element = {};
array.forEach(item => {
result = item.split("-"); 
element[result[0]] = result[1];
}

【讨论】:

    【解决方案3】:

    使用 Array.reduce

    const arr = ["gender-1", "age-m", "city-london", "lang-en", "support-home"]
    arr.reduce((acc, c) => {
        const str = c.split('-')
        return {...acc, [str[0]]: str[1]}
    }, {})
    

    【讨论】:

    • 令人印象深刻,但几乎无法辨认。我建议使用直观的变量名称和一些文档。
    【解决方案4】:

    它可以用 split 和一个地图来解决,数组中的每个项目用 替换 - 使用它会变成键值,然后将这些值分配给您要返回的对象。

    var arrayObject = ["gender-m", "age-20", "city-london", "lang-en", "support-home"];
    var objectResulted ={};
    
    arrayObject.map(
      function(item){ 
      var splitedValue = item.split('-');  
      objectResulted [splitedValue[0]]= splitedValue[1] 
      });
    

    console.log(objectResulted);

    【讨论】:

      【解决方案5】:

      由于您最初将此标记为“Lodash”问题,因此这里有一个基于 Lodash 的答案:

      const arr = ["gender-m", "age-20", "city-london", "lang-en", "support-home"];
      
      const obj = _.chain(arr)
        .map(v => _.split(v, '-'))
        .fromPairs()
        .value();
        
      console.log(obj);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

      【讨论】:

        【解决方案6】:

        使用Array.reduce方法

        ["gender-m", "age-20", "city-london", "lang-en", "support-home"].map(s => s.split('-')).reduce((rs, el) => {rs[el[0]] = el[1]; return rs;}, {});

        【讨论】:

          【解决方案7】:

          您可以使用Array.reduce 方法来做到这一点

          ["gender-m", "age-20", "city-london", "lang-en", "support-home"].reduce((rs, el) => {rs[el.split('-')[0]] = el.split('-')[1]; return rs;}, {});

          【讨论】:

            猜你喜欢
            • 2020-08-19
            • 1970-01-01
            • 2021-03-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-20
            • 2022-10-07
            相关资源
            最近更新 更多