使用es6或lodash将字符串数组转换为对象数组

时间:2017-08-14 23:26:57

标签: javascript arrays ecmascript-6 lodash

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

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
}));

你会怎么做?

4 个答案:

答案 0 :(得分:3)

您可以像这样使用map

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

console.log(newArr);

答案 1 :(得分:2)

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

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

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

console.log(array);

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

老式的方式:

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(),则需要将对象存储在新数组中。