为 arr 中的 objs 添加 id:s。 R.assoc('id', i++) 不递增 i
Add id:s for objs in arr. R.assoc('id', i++) not incrementing i
我正在尝试使用 Ramda 将 id:s 添加到数组中的对象,但每个对象的 ID 都等于 1。
let i = 1;
return R.evolve({
cms: {
components: R.map(R.assoc('id', i++)),
},
}, state),
我认为这与 i++ 有关。一个人不应该像 Ramda 那样变异。
但是,我该如何正确地做到这一点。
您必须将它包装在一个函数中,否则 i++
会计算一次然后应用于您的所有元素。
const state = {
cms: {
components: [{
name: 'Serge'
}, {
name: 'Odile'
}, {
name: 'Simon'
}, {
name: 'Émile'
}]
}
};
let i = 1,
modifiedState = R.evolve({
cms: {
components: R.map((element) => R.assoc('id', i++, element)),
},
}, state);
console.log(modifiedState.cms.components);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
或者您可以像这样使用 Ramda 的 addIndex
:
const transform = R.evolve({
cms: {
components: R.addIndex(R.map)((comp, i) => R.assoc('id', i + 1, comp)),
},
})
const state = {
cms: {
components: [
{name: 'Serge'},
{name: 'Odile'},
{name: 'Simon'},
{name: 'Émile'}
]
}
};
console.log(transform(state))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
我正在尝试使用 Ramda 将 id:s 添加到数组中的对象,但每个对象的 ID 都等于 1。
let i = 1;
return R.evolve({
cms: {
components: R.map(R.assoc('id', i++)),
},
}, state),
我认为这与 i++ 有关。一个人不应该像 Ramda 那样变异。
但是,我该如何正确地做到这一点。
您必须将它包装在一个函数中,否则 i++
会计算一次然后应用于您的所有元素。
const state = {
cms: {
components: [{
name: 'Serge'
}, {
name: 'Odile'
}, {
name: 'Simon'
}, {
name: 'Émile'
}]
}
};
let i = 1,
modifiedState = R.evolve({
cms: {
components: R.map((element) => R.assoc('id', i++, element)),
},
}, state);
console.log(modifiedState.cms.components);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
或者您可以像这样使用 Ramda 的 addIndex
:
const transform = R.evolve({
cms: {
components: R.addIndex(R.map)((comp, i) => R.assoc('id', i + 1, comp)),
},
})
const state = {
cms: {
components: [
{name: 'Serge'},
{name: 'Odile'},
{name: 'Simon'},
{name: 'Émile'}
]
}
};
console.log(transform(state))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>