Использование javascript map () для преобразования значений в объекты - PullRequest
0 голосов
/ 10 июля 2019

Извините, это, вероятно, довольно тривиально, но я не могу найти решение для:

У меня есть объект, который содержит следующие элементы:

 0: "A"
 1: "B"
 2: "C"

Я хотел бы использовать функцию map (), чтобы преобразовать ее в нечто вроде этого:

0: {name: "A"}
1: {name: "B"}
2: {name: "C"}

Если я использую это:

this.xxx = this.operations.map(obj =>  obj.name);
console.log(this.xxx);

или это:

this.xxx = this.operations.map(obj => {name:obj} );
 console.log(this.xxx);

элементы ххх не определены.

Ответы [ 7 ]

1 голос
/ 10 июля 2019

Когда вы пишете

someArray.map(obj => {
    //this is a code block, not an object definition
} )

, фигурные скобки заключают блок кода, а не литерал объекта.

Если вы хотите, чтобы функция стрелки возвращала объект, JS требует, чтобы вы завернулиобъектный литерал с круглыми скобками для правильного анализа вашего намерения.

Таким образом:

this.operations.map(obj => ({name:obj}) )

исправит ваше отображение.

1 голос
/ 10 июля 2019

Прежде всего, если у вас есть объект, вы не знаете, как вы можете работать с функцией карты в целом, так как это функция-прототип массива.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map однако, если его массив, вы должны попробовать это:

const operations = [ "A", "B", "C"]

const xxx = operations.map(obj => ({name:obj}) );

console.log(xxx)

вам не хватало оберточных скобок, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#Advanced_syntax

, но если это действительно объект, тогда это должно работать (не уверен в производительности):

const operations = {
	0: "A",
 	1: "B",
 	2: "C",
} 

const xxx = {}
Object.entries(operations).forEach(entry => {
  xxx[entry[0]] = { name: entry[1] }
});

console.log(xxx)
1 голос
/ 10 июля 2019

Поскольку объект похож на массив, вы можете добавить свойство length, сделав его array like таким образом.Затем вы можете преобразовать его в реальный массив, используя Array.from , передав функцию преобразования в качестве второго аргумента:

const input = {
  0: "A",
  1: "B",
  2: "C"
}

const result = Array.from(
  { ...input, length: Object.keys(input).length },
  item => ({ name: item })
)

console.log(result)
1 голос
/ 10 июля 2019

Если бы я понял, вы хотели бы превратить их в объект?Вот как вы могли бы сделать:

var x = ["A", "B", "C"];

console.log(x.map(obj => {return {name: obj}}));
1 голос
/ 10 июля 2019

Сопоставить значения объекта с массивом объектов, а затем преобразовать его в объект, используя Object.assign

var obj = {
  0: "A",
  1: "B",
  2: "C",
};
console.log(Object.assign({},Object.values(obj).map(a => ({ name: a }))));
1 голос
/ 10 июля 2019

Попробуйте это с Object.entries

let obj = {
  0: "A",
  1: "B",
  2: "C"
}

let result = Object.entries(obj).map(([,name]) => ({
  name
}));
console.log(result)
0 голосов
/ 10 июля 2019

Вы не можете использовать .map() для создания объекта, так как он всегда возвращает массив.Лучше всего было бы получить записи в объекте, а затем использовать .reduce() на нем, например:

const operations = {
  0: 'A',
  1: 'B',
  2: 'C',
}

const res = Object.entries(operations)
    .reduce((acc, [key, val], i) => { acc[i] = { [key]: val }; return acc },{})

console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...