[英]Remove an object from the array then update the property of all objects
我想通过 id 从数组中删除一个对象,然后更新所有对象的位置属性。 例如我有一个数组,如:
const arr = [
{id: 10, position: 1},
{id: 11, position: 2},
{id: 12, position: 3},
{id: 13, position: 4}
]
示例:首先,我需要删除 id 为 12 的对象,然后更改每个对象的位置属性。 结果:
const arr = [
{id: 10, position: 1},
{id: 11, position: 2},
{id: 13, position: 3}
]
我的尝试:
const fn = id => pipe(
reject(propEq('id', id)),
map((item, key) => evolve({position: key}))
);
通过将R.addIndex
应用于R.map
创建一个mapIndexed
函数。 这是必需的,因为R.map
不会将当前索引传递给回调函数。
此外,您需要向R.evolve
传递一个函数来设置position
(通过R.always
或箭头函数),并且您还需要传递item
以进行进化:
const { pipe, reject, propEq, addIndex, map, evolve, always } = R; const mapIndexed = addIndex(map); const fn = id => pipe( reject(propEq('id', id)), mapIndexed((item, key) => evolve({ position: always(key + 1) }, item)) ); const arr = [{"id":10,"position":1},{"id":11,"position":2},{"id":12,"position":3},{"id":13,"position":4}]; const result = fn(11)(arr); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
在这种情况下,我会跳过R.evolve
,并在item
上使用 spread 来生成新对象,并分配新position
:
const { pipe, reject, propEq, addIndex, map } = R; const mapIndexed = addIndex(map); const fn = id => pipe( reject(propEq('id', id)), mapIndexed((item, key) => ({ ...item, position: key + 1 })) ); const arr = [{"id":10,"position":1},{"id":11,"position":2},{"id":12,"position":3},{"id":13,"position":4}]; const result = fn(11)(arr); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
您可以使用Array.filter()
删除和Array.map()
重新定位项目,如下所示:
const arr = [ {id: 10, position: 1}, {id: 11, position: 2}, {id: 12, position: 3}, {id: 13, position: 4} ] repositionedArray = arr.filter(item => item.id != 11).map((item, index) => ({...item, position: index+1})) console.log(repositionedArray);
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.