Javascript 在ReactJS中为动态属性使用模板文字
我失败的尝试:Javascript 在ReactJS中为动态属性使用模板文字,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我失败的尝试: temp.map((obj,i) => ({ obj[`person${++i}`] = obj.person.name }) 我想生产这样的产品 [{id:324, person1:'mike'},{id:23, person2:'jane'}] 但我一直坚持使用模板文字字符串通过连接使属性动态化。这应该可以做到: var myInput = ["John", "Jane", "Steven", "Alice"]; var myOutput = myIn
temp.map((obj,i) => ({
obj[`person${++i}`] = obj.person.name
})
我想生产这样的产品
[{id:324, person1:'mike'},{id:23, person2:'jane'}]
但我一直坚持使用模板文字字符串通过连接使属性动态化。这应该可以做到:
var myInput = ["John", "Jane", "Steven", "Alice"];
var myOutput = myInput.map ((name, index) => {
var out = {};
out[`person${index}`] = name;
return out;
}); // myOutput is [{person1:"John"}, {person2:"Jane"} ... etc.
map
创建新数组,而不是修改现有数组。数组的值是由函数的返回值组成的,因此,如果希望值成为对象,则必须创建新对象,然后将属性分配给它们。代码的问题是,使用
()=>({….})
您正在使用的obj[…]
不是有效的密钥
map
返回一个新数组,以便将结果存储在一个新变量中,如果要修改同一数组,最好使用forEach
检查此代码段:
让arr=[{id:10,名称:'A'},{id:20,名称:'B'}];
设newArr=arr.map((el,i)=>({
id:el.id,
[`name${i+1}`]:el.name
}));
log('new array',newArr)代码>这个怎么样
describe("sample test", () => {
it("Dynamic property in ES6", () => {
const temp = [
{ id: 324, person: { name: "mike" } },
{ id: 23, person: { name: "jane" } }
];
console.log(
temp.map((obj, i) => ({
id: obj.id,
[`person${i + 1}`]: obj.person.name
}))
);
});
});
输出:
[ { id: 324, person1: 'mike' }, { id: 23, person2: 'jane' } ]
你的输入看起来像什么?您是想修改temp
还是创建一个新对象?@PilotInPyjamas只需假设temp是一个对象数组,这无关紧要,我的问题是如何使用es6字符串文字在循环中构造动态属性。@CeciliaChan您想更改原始数据还是创建新数组?不是问题,但是不要使用.map()
,除非您想创建一个新数组:如果您只想在现有数组上迭代以修改其中的对象,请使用.forEach()
。这也很重要!为了向您展示将一种数据结构转换为另一种数据结构的适当方法,我们需要同时查看输入和输出结构。在这里,我们用具体的问题来准确地显示你想做什么,比用一般的问题来猜测你想做什么要好得多。这个输出所要求的问题:[{id:324,person1:'mike'},{id:23,person2:'jane'}]
@nnnnnn-刚刚编辑了代码,以便使用问题中提到的精确数据输入和输出。