为 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>