Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ReactJS中为动态属性使用模板文字_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

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-刚刚编辑了代码,以便使用问题中提到的精确数据输入和输出。