Javascript 在动作分派时向对象数组中的每个对象添加键属性

Javascript 在动作分派时向对象数组中的每个对象添加键属性,javascript,react-native,react-redux,Javascript,React Native,React Redux,这是我的问题, 我的大脑有一个状态 const initialState = { arrOfObjects: [ {name: 'John', age: 30, nickname: 'Johnny'}, {name: 'Jack', age: 31, nickname: 'Jackie'}, {name: 'Bill', age: 32, nickname: 'Billie'} ] } case actionTypes.PERSON_LA

这是我的问题, 我的大脑有一个状态

const initialState = {
    arrOfObjects: [
       {name: 'John', age: 30, nickname: 'Johnny'},
       {name: 'Jack', age: 31, nickname: 'Jackie'},
       {name: 'Bill', age: 32, nickname: 'Billie'}
   ]
}
case actionTypes.PERSON_LASTNAME:
            return{
                ...state,
                arrOfObjects: state.arrOfObjects.map(person => ({
                    ...person,
                    _lastname: action.lastname
                }))
            }  
我发出一个行动

axios.all(personIds.map(el => axios.get(`/people/${el}/persons`)))
.then(res => {
  for (let per in res) {
    dispatch(personLastname(res[per].data.lastname))
     }
 });
然后我在我的减速机里做这个

const initialState = {
    arrOfObjects: [
       {name: 'John', age: 30, nickname: 'Johnny'},
       {name: 'Jack', age: 31, nickname: 'Jackie'},
       {name: 'Bill', age: 32, nickname: 'Billie'}
   ]
}
case actionTypes.PERSON_LASTNAME:
            return{
                ...state,
                arrOfObjects: state.arrOfObjects.map(person => ({
                    ...person,
                    _lastname: action.lastname
                }))
            }  
所以问题是,使用这种方法,我向数组中的每个对象添加key属性,但每个对象都有相同的键值,即最后调度的值

const initialState = {
    arrOfObjects: [
       {name: 'John', age: 30, nickname: 'Johnny', _lastname: 'Smith'},
       {name: 'Jack', age: 31, nickname: 'Jackie', _lastname: 'Smith'},
       {name: 'Bill', age: 32, nickname: 'Billie', _lastname: 'Smith'}
   ]
}
如何将此键属性_lastname添加到每个对象中,但按照调度操作时的顺序,first lastname应该属于John object,second应该属于Jack,依此类推。。。我希望这有意义

提前谢谢

编辑:

personLastName函数的外观如下:

export const personLastname = lastname => {
    return{
        type: PERSON_LASTNAME,
        lastname: lastname
    }
}    

方法1:解决每个axios调用后调用操作

axios.all(personIds.map(el => axios.get(`/people/${el}/persons`).then(res => {
  dispatch(personLastname(res.data.lastname)) // Assuming you get response with data prop
})));

方法2:将整个阵列作为有效负载而不是单个项目发送操作,并在reducer中处理匹配。这假设resp中姓氏对象的顺序与状态相同

axios.all(personIds.map(el => axios.get(`/people/${el}/persons`)))
  .then(res => dispatch(personLastname(res));

export const personLastname = people => {
    return{
        type: PERSON_LASTNAME,
        people: people
    }
}    


case actionTypes.PERSON_LASTNAME:
  return {
    ...state,
    arrOfObjects: state.arrOfObjects.map((person, i) => ({
      ...person,
      _lastname: action.people[i].data.lastname
    }))
  }


personLastName函数是什么样子的?@samanime我编辑了这个问题并添加了personLastName函数。还有,你是如何从api外观中获得res的?如果我在for循环中使用console.logres[per].data.lastname,我总是按照应该的顺序获得lastnames。是的,但是console.logres看起来怎么样?谢谢@Clarity。第二种方法是解决方案。非常感谢你。