对不起,它可能很琐碎,但我仍然找不到以下解决方案:
我有一个包含以下元素的对象:
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的元素未定义。
答案 0 :(得分:1)
尝试使用Object.entries
let obj = {
0: "A",
1: "B",
2: "C"
}
let result = Object.entries(obj).map(([,name]) => ({
name
}));
console.log(result)
答案 1 :(得分:1)
将对象值映射到对象数组,然后使用Object.assign
将其转换为对象
var obj = {
0: "A",
1: "B",
2: "C",
};
console.log(Object.assign({},Object.values(obj).map(a => ({ name: a }))));
答案 2 :(得分:1)
如果我了解您想让他们反对的话?那就是你可以做的:
.
答案 3 :(得分:1)
由于对象类似于数组,因此可以通过这种方式添加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)
答案 4 :(得分:1)
首先,如果您有对象,则不确定如何整体使用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)
但是如果它确实是一个对象,那么它应该起作用(不确定性能):
const operations = {
0: "A",
1: "B",
2: "C",
}
const xxx = {}
Object.entries(operations).forEach(entry => {
xxx[entry[0]] = { name: entry[1] }
});
console.log(xxx)
答案 5 :(得分:1)
写作时
someArray.map(obj => {
//this is a code block, not an object definition
} )
花括号括住一个代码块,而不是对象文字。
如果希望箭头函数返回对象,则JS要求您用括号将对象文字括起来,以便正确解析您的意图。
因此:
this.operations.map(obj => ({name:obj}) )
将修复您的映射。
答案 6 :(得分:0)
您不能使用.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)