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

Convert array of strings into an array of objects

我有这个 JavaScript 数组:

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

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

[
  { name: "124857202" },
  { name: "500255104" },
  { name: "78573M104" }
]

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

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

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

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

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

另一种方法 - Array#reduce.

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

您可以使用

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

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

I want to convert this particular array into an array of objects as shown below

如果您想就地更改实际数组(而不是创建新数组),您可以使用 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);

或者,如果你想创建一个新数组并保持原数组不变,你可以使用 , here it can be re-written to use more modern ES6 features to make it more concise, such as an arrow function and shorthand property names:

const arr = [ "124857202", "500255104", "78573M104" ];
const res = arr.map(name => ({name}));
console.log(res);

, and the second part of are the most correct. For completeness, here is a version that uses Underscore's _.map:

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

对于这个特定的用例,_.mapArray.prototype.map 相比并没有给你带来太多好处,只是增加了一点便携性。然而,由于 Underscore 的迭代速记,使用 _.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]);
}