繁体   English   中英

根据用户输入更新数组排序顺序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM