【问题标题】:Convert array of string to array of object using es6 or lodash使用 es6 或 lodash 将字符串数组转换为对象数组
【发布时间】:2018-01-22 21:05:59
【问题描述】:

我有一个字符串数组,我想将其转换为对象数组。

array = ['a', 'b', 'c'];

我要生成

array= [
  {'name': 'a', 'isChecked': false, 'availibility': 0 },
  {'name': 'b', 'isChecked': false, 'availibility': 0 },
  {'name': 'b', 'isChecked': false, 'availibility': 0 }
];

我在下面尝试过,仍然返回 originalArray!

array.map((name) => ({
  name,
  isChecked: false,
  availability: 0
}));

你会怎么做?

【问题讨论】:

  • map 不会改变原始数组,而是返回一个新数组。

标签: javascript arrays ecmascript-6 lodash


【解决方案1】:

你可以像这样使用map

array= ['a', 'b', 'c'];
let newArr = array.map(item => {
  return {
    'name': item,
    'isChecked': false,
    'availibility': 0
  }
})

console.log(newArr);

【讨论】:

    【解决方案2】:

    您需要使用以下内容,因为正如@ASDFGerte 指出的那样,map 不会修改原始对象,而是返回一个您应该分配给变量的新对象。在这种情况下,我只是将其分配回原来的 array 变量。

    var array = ['a', 'b', 'c'];
    
    array = array.map((name) => ({
        name,
        isChecked: false,
        availability: 0
    }));
    
    console.log(array);

    【讨论】:

      【解决方案3】:

      您的map() 按预期工作,但它确实返回了一个新数组。如果你想改变原始数组,使用forEach()

      array.forEach((val, i) => array[i] = {
          name: val,
          isChecked: false,
          availability: 0
      })
      

      【讨论】:

        【解决方案4】:

        老套路:

        var outputArray = [];
        var inputArray = ['a', 'b', 'c'];
        for (var i=0, len = inputArray.length; i < len; i++) {
            outputArray.push({
                   name : inputArray[i],
                   isChecked : false,
                   availability : 0
            });
        }
        

        如果您想使用map(),您需要将对象存储在新数组中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-06
          • 1970-01-01
          • 2019-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多