将字符串数组转换为对象数组

时间:2017-03-08 21:08:54

标签: javascript arrays underscore.js

我有一个JavaScript数组。

volumes:
   maria_volume: 
       external:
           name: volume-name

我想将此特定数组转换为对象数组,如下所示。

["124857202", "500255104", "78573M104"]

6 个答案:

答案 0 :(得分:4)

使用Array#map将每个值转换为不同的值:

var newArr = arr.map(function(value) {
  return {name: value};
});

Array#map将回调应用于数组中的每个元素,并返回一个包含回调返回值的新数组。

答案 1 :(得分:0)

我会看一下javascript中的array.map函数。

const mappedArr = arr.map(value => {
  return {
    name: value
  }
})

答案 2 :(得分:0)

另一种方法 - Array#reduce

var arr = ["124857202", "500255104", "78573M104"];
var res = arr.reduce(function(s, a){
    s.push({name: a});
    return s;
  }, [])
  
console.log(res);

答案 3 :(得分:0)

您可以使用

var arrayOfStrings = ["124857202", "500255104", "78573M104"];
var arrayOfObjects = [];

arrayOfStrings.forEach(function (element, index) {
   arrayOfObjects.push({
        name: element,
   })
});

答案 4 :(得分:0)

我想将该特定数组转换为对象数组,如下 如下所示

如果要更改实际数组(而不是创建新数组),则可以使用for循环来迭代数组的索引。对于每个索引,您可以使用对象{name: arr[i]}替换该值。该对象具有一个name键,并具有一个作为当前元素arr[i]的值。

const arr = [ "124857202", "500255104", "78573M104" ];
for(let i = 0; i < arr.length; i++) {
  arr[i] = {name: arr[i]};
}
console.log(arr);

答案 5 :(得分:0)

Felix Kling' answergehsekky's answerNick Parsons' answer 的第二部分是最正确的。为了完整起见,这里有一个使用 Underscore 的 _.map 的版本:

import { map } from 'underscore';
var result = map(array, name => ({name}));

对于这个特定的用例,_.mapArray.prototype.map 相比并没有给您带来太多好处,只是增加了一点便携性。然而,由于 Underscore 的 iteratee 简写,使用 _.map 对大脑来说更容易一些:

// Underscore map
var array = map(result, 'name');

// Array.prototype.map
var array = result.map(obj => obj.name);

当您需要迭代普通对象时,Underscore 的 map 和其他集合函数非常有用,因为 JavaScript 的内置方法根本不支持:

var objectOfStrings = {
    first: "124857202",
    second: "500255104",
    third: "78573M104"
};

// to array of strings, Underscore
var arrayOfStrings = map(objectOfStrings);

// to array of strings, vanilla JS
var arrayOfStrings = [], value;
for (key in objectOfStrings) {
    arrayOfStrings.push(objectOfStrings[key]);
}

// to array of objects, Underscore
var arrayOfObjects = map(objectOfStrings, name => ({name}));

// to array of objects, vanilla JS
var arrayOfStrings = [], name;
for (key in objectOfStrings) {
    name = objectOfStrings[key];
    arrayOfStrings.push({name});
}

var objectOfObjects = {
    first: {name: "124857202"},
    second: {name: "500255104"},
    third: {name: "78573M104"}
};

// to array of strings, Underscore
var arrayOfStrings = map(objectOfStrings, 'name');

// to array of strings, vanilla JS
var arrayOfStrings = [], value;
for (key in objectOfObjects) {
    arrayOfStrings.push(objectOfObjects[key].name);
}

// to array of objects, Underscore
var arrayOfObjects = map(objectOfObjects);

// to array of objects, vanilla JS
var arrayOfObjects = [], value;
for (key in objectOfStrings) {
    arrayOfObjects.push(objectOfStrings[key]);
}