【问题标题】:Convert array of strings to object with params and values使用参数和值将字符串数组转换为对象
【发布时间】:2021-08-16 13:35:20
【问题描述】:

我有下一个带有字符串的数组:

['val1=123','val2=456']

如何将其拆分为具有参数和值的对象?

{
  val1: 123,
  val2: 456,
}

【问题讨论】:

  • 你试过splitmap和/或reduce吗?
  • res.map(x => x.split('='));返回我的数组
  • 有几十个重复。你在挣扎什么?这非常相似:stackoverflow.com/questions/42974735/…
  • @Ted 将该输出保存到变量 res2 或类似变量中。然后你可以使用Object.fromEntries(res2)
  • const res = ['val1=123','val2=456']; res.map(x => x.split('='));结果:[[“val1”,“123”],[“val2”,“456”],

标签: javascript


【解决方案1】:

let arr = ['val1=123', 'val2=456']
let object = {}

for (let i = 0; i < arr.length; i++) {
  var split = arr[i].split("=")
  object[split[0]] = split[1]
}

console.log(object); // { val1: '123', val2: '456' }

【讨论】:

    【解决方案2】:

    let obj = {};
    let arr = ['val1=123', 'val2=456'];
    
    arr.forEach(i => {
      let x = i.split('=');
      obj[x[0]] = parseInt(x[1]);
    });
    
    console.log(obj);

    【讨论】:

      【解决方案3】:

      const recordStrings = ['val1=123', 'val2=456']
      const record = Object.fromEntries(
        recordStrings.map(str => str.split('='))
      )
      
      console.log(record)

      解释:

      recordStrings.map(str =&gt; str.split('=')) 返回[[val1, 123], [val2, 456]]

      Object.fromEntries(entries) 从包含[key, value] 元组的数组中创建一个对象。

      【讨论】:

      • Object.fromEntries 太棒了
      【解决方案4】:

      拆分数组中的字符串并将数组转换为对象:

      const res = ['val1=123','val2=456'];
      const result = Object.fromEntries(res.map(x => {
          const [l, r] = x.split('=');
          return [l, +r];
      }));
      console.log(result);

      【讨论】:

      • Object.fromEntries 太棒了
      【解决方案5】:

      let arr = ['val1=123','val2=456'];
          arr.forEach(str => {
              let arrStr = str.split('=');
              eval(arrStr[0] + '= ' + arrStr[1] + ';');
          })
          console.log(val1, val2);

      let arr = ['val1=123','val2=456'];
          arr.forEach(str => {
              let arrStr = str.split('=');
              window[arrStr[0]] = arrStr[1];
          })
          console.log(val1, val2);

      【讨论】:

        【解决方案6】:

        您可以尝试使用 reduce 方法,将数组转换为任何其他数据类型(如对象、字符串、数字)非常有帮助。

        const arr = ['val1=123','val2=456'];
        
        const items = arr.reduce((total, item) => {
          const [key, value] = item.split('=');
          if (key) {
            total[key] = value
          }
          return total;
        }, {})
        
        console.log(items);

        【讨论】:

        • Array#reduce 非常强大,这就是它不善于传达意图的原因。为了清楚起见,我建议将Array#mapObject.fromEntries 组合使用。
        猜你喜欢
        • 2016-03-09
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多