Javascript 合并两个具有内部数组属性的对象,而不改变react中的状态

Javascript 合并两个具有内部数组属性的对象,而不改变react中的状态,javascript,arrays,reactjs,react-native,react-redux,Javascript,Arrays,Reactjs,React Native,React Redux,我有一个这样的状态对象: { news: { news: [ { id: 1, name: 'test1' }, { id: 2, name: 'test2' }, { id: 3,

我有一个这样的状态对象:

{
    news: {
        news: [
            {
                id: 1,
                name: 'test1'
            },
            {
                id: 2,
                name: 'test2'
            },
            {
                id: 3,
                name: 'test3'
            }
        ]
    }
    ]
}
现在,我提出了一个Ajax请求,并得到如下响应:

[
    {
        id: 4,
        name: 'test4'   
    },
    {
        id: 5,
        name: 'test5'   
    },
    {
        id: 6,
        name: 'test6'   
    }
]
我不想改变状态,所以在我的Reducer中,如何合并这两个值,以便最终输出如下:

{
    news: {
        news: [
            {
                id: 1,
                name: 'test1'
            },
            {
                id: 2,
                name: 'test2'
            },
            {
                id: 3,
                name: 'test3'
            },
            {
                id: 4,
                name: 'test4'   
            },
            {
                id: 5,
                name: 'test5'   
            },
            {
                id: 6,
                name: 'test6'   
            }
        ]
    }
    ]
}
我尝试了类似的方法,但是,它替换了整个新闻对象

return { ...state, news: action.payload }

其中action.payload具有我在响应中获得的值。我知道我可能遗漏了一些简单而明显的东西。

假设
操作。有效负载
是ajax返回的
新闻
数组:

return { ...state, news: { news: [...state.news.news, ...action.payload] } }

假设
action.payload
是ajax返回的
news
数组:

return { ...state, news: { news: [...state.news.news, ...action.payload] } }

这是一个帮助函数,它将为您执行深度克隆,而不考虑结构:

功能深度克隆(obj){
返回Object.keys(obj).reduce((objClone,key)=>{
让新价值;
if(Array.isArray(obj[key]){
newValue=obj[key].map(item=>deepClone(item));
}
else if(obj[key]!==null&&typeof obj[key]='object'){
newValue=deepclone(obj[key]);
}
否则{
newvalue=obj[key];
}
返回{…copyObj[key]:newvalue};
}, {});
}

这是一个帮助函数,无论结构如何,它都将为您执行深度克隆:

功能深度克隆(obj){
返回Object.keys(obj).reduce((objClone,key)=>{
让新价值;
if(Array.isArray(obj[key]){
newValue=obj[key].map(item=>deepClone(item));
}
else if(obj[key]!==null&&typeof obj[key]='object'){
newValue=deepclone(obj[key]);
}
否则{
newvalue=obj[key];
}
返回{…copyObj[key]:newvalue};
}, {});
}