json 使用javascript map()返回未定义元素的数组

zfciruhq  于 2023-04-22  发布在  Java
关注(0)|答案(7)|浏览(110)

抱歉,这可能很琐碎,但我仍然无法找到解决方案:
我有一个包含以下元素的对象:

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

xxx的元素未定义。

vom3gejh

vom3gejh1#

由于对象类似于数组,因此可以添加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)
eagi6jfj

eagi6jfj2#

你不能使用.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)
kr98yfug

kr98yfug3#

当你写的时候

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

花括号括起的是代码块,而不是对象文字。
如果你想要一个箭头函数返回一个对象,JS要求你用括号 Package 对象字面量,以便正确地解析你的意图。
因此:

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

将修复您的Map。
或者,如果你想做一些更复杂的事情,使用代码块并返回值:

this.operations.map(obj => {
    // do some calculations
    return {name: obj};
})
new9mtju

new9mtju4#

如果我明白你想把它们变成对象?这就是你可以做的:

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

console.log(x.map(obj => {return {name: obj}}));
wvyml7n5

wvyml7n55#

将对象值Map到对象数组,然后使用Object.assign将其转换为对象

var obj = {
  0: "A",
  1: "B",
  2: "C",
};
console.log(Object.assign({},Object.values(obj).map(a => ({ name: a }))));
vd8tlhqk

vd8tlhqk6#

首先,如果你有对象,不确定你如何使用map函数,因为它是数组原型函数。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)

您缺少了 Package 括号,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)
oknrviil

oknrviil7#

试试这个,用Object.entries

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

let result = Object.entries(obj).map(([,name]) => ({
  name
}));
console.log(result)

相关问题