[英]Update an array sort order based on a user input
I need to write a javascript function that allows a user to input the sort order where they want an object to go AND then fix the position that has that sort order at the time
var object = [{
sortOrder: 4,
id: "braves"
},{
sortOrder: 2,
id: "cubs"
},{
sortOrder: 3,
id: "marlins"
},{
sortOrder: 1,
id: "mets"
}]
用户请求将 id: "braves" 移动到 sortOrder: 1。
所以它会将“勇敢者”放在 sortOrder 1 中,然后将 1 加到大都会、幼崽、马林鱼上,现在的顺序是:勇敢、大都会、幼崽、马林鱼。
我看过 sort() function 但它似乎只是对它进行排序。 如果mets 和brakes 现在的sortOrder 都是1,那么它怎么知道哪个应该是第一个和第二个?
在 jquery/javascript 中处理这个问题的最佳方法是什么
你可以试试这个
function moveOrder(id,position){
object.find(item=>item.id===id).sortOrder=position;
object.forEach(item=>{
if(item.id!==id && item.sortOrder>=position)
item.sortOrder=item.sortOrder+1;
})
}
您可以将当前的对象数组 map 转换为新的对象数组,如果每个sortOrder
大于或等于提供的sortOrder
则递增。 然后,您可以在数组中找到 object ,其id
等于使用.find()
提供的id
,以便您可以将其sortOrder
更改为提供的sortOrder
。 最后,您可以使用新数组:
function sortArr(arr, _sortOrder, _id) { const new_arr = arr.map(({sortOrder, ...r}) => sortOrder >= _sortOrder? {...r, sortOrder: sortOrder+1}: {...r, sortOrder}); const obj = new_arr.find(({id}) => id === _id); obj.sortOrder = _sortOrder; return new_arr.sort(({sortOrder:a}, {sortOrder:b}) => ba);; } const arr = [{sortOrder:4,id:"braves"},{sortOrder:2,id:"cubs"},{sortOrder:3,id:"marlins"},{sortOrder:1,id:"mets"}]; console.log(sortArr(arr, 1, "braves"));
您可以使用map 。
const object = [ { sortOrder: 4, id: 'braves', }, { sortOrder: 2, id: 'cubs', }, { sortOrder: 3, id: 'marlins', }, { sortOrder: 1, id: 'mets', }, ]; function sortObject(id, nextSortOrder) { return object.map((o) => { if (o.id === id) { return Object.assign({}, o, { sortOrder: nextSortOrder }); } return Object.assign({}, o, { sortOrder: o.sortOrder === object.length? 1: o.sortOrder + 1, }); }); } const sortedObject = sortObject('brave', 1); console.log(sortedObject);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.