使用 immutability-helper 来 $merge 一个数组
using immutability-helper to $merge an array
我从下面的代码中得到以下错误:
错误:update():$merge 需要 'object' 类型的目标;未定义
我正在尝试合并 2 个数组,同时仅更新原始数组中项目中的某些值。例如,我想更新 status 和 updated 属性而不是 members 数组 属性.
我认为问题可能出在更新方法中使用 index 但这只是一个猜测。有任何想法吗?如果有更好的方法,我想知道。
const oldProjects = [
{id: 1, members:[{name: 'Al'},{name: 'Joe'}], status: 'new', updated: '2017-05-19 12:00:00'},
];
const newProjects = [
{id: 1, members:[], status: 'in-progress', updated: '2017-05-19 14:05:00'},
{id: 2, members:[], status: 'new', updated: '2017-05-19 14:10:00'},
{id: 3, members:[], status: 'completed', updated: '2017-05-19 14:15:00'},
];
let newState = oldProjects;
newProjects.forEach(np => {
const index = oldProjects.findIndex(op => op.id === np.id);
if (index === -1) {
newState = update(newState, {$push: np});
} else {
newState = update(newState, {
index: {$merge: { status: np.status, updated: np.updated }}
});
}
});
使用动态密钥时,您需要在 []
内指定。因此,将 index
包裹在 []
中以访问索引等于 index
的对象,否则它只会在 newState
中寻找键 index
尝试
newProjects.forEach(np => {
const index = oldProjects.findIndex(op => op.id === np.id);
if (index === -1) {
newState = update(newState, {$push: np});
} else {
newState = update(newState, {
[index]: {$merge: { status: np.status, updated: np.updated }}
});
}
});
我从下面的代码中得到以下错误:
错误:update():$merge 需要 'object' 类型的目标;未定义
我正在尝试合并 2 个数组,同时仅更新原始数组中项目中的某些值。例如,我想更新 status 和 updated 属性而不是 members 数组 属性.
我认为问题可能出在更新方法中使用 index 但这只是一个猜测。有任何想法吗?如果有更好的方法,我想知道。
const oldProjects = [
{id: 1, members:[{name: 'Al'},{name: 'Joe'}], status: 'new', updated: '2017-05-19 12:00:00'},
];
const newProjects = [
{id: 1, members:[], status: 'in-progress', updated: '2017-05-19 14:05:00'},
{id: 2, members:[], status: 'new', updated: '2017-05-19 14:10:00'},
{id: 3, members:[], status: 'completed', updated: '2017-05-19 14:15:00'},
];
let newState = oldProjects;
newProjects.forEach(np => {
const index = oldProjects.findIndex(op => op.id === np.id);
if (index === -1) {
newState = update(newState, {$push: np});
} else {
newState = update(newState, {
index: {$merge: { status: np.status, updated: np.updated }}
});
}
});
使用动态密钥时,您需要在 []
内指定。因此,将 index
包裹在 []
中以访问索引等于 index
的对象,否则它只会在 newState
index
尝试
newProjects.forEach(np => {
const index = oldProjects.findIndex(op => op.id === np.id);
if (index === -1) {
newState = update(newState, {$push: np});
} else {
newState = update(newState, {
[index]: {$merge: { status: np.status, updated: np.updated }}
});
}
});