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

时间:2019-10-23 04:43:44

标签: javascript arrays sorting

我需要编写一个javascript函数,该函数允许用户在要对象移动的地方输入排序顺序,然后确定当时具有该排序顺序的位置

var object = [{
  sortOrder: 4,
  id: "braves"
},{
  sortOrder: 2,
  id: "cubs"
},{
  sortOrder: 3,
  id: "marlins"
},{
  sortOrder: 1,
  id: "mets"
}]

用户请求将ID:“勇敢”转移到sortOrder:1.

因此,它将“勇敢者”放在sortOrder 1处,然后在mets,cub,marlins上加1,并且顺序为:勇敢者,mets,cubs,marlins。

我看过sort()函数,但看起来它只是对其进行排序。而且如果mets和braves现在的sortOrder都为1,那么它如何知道应该先将哪个与2nd进行比较?

在jquery / javascript中处理此问题的最佳方法是什么

3 个答案:

答案 0 :(得分:2)

您可以尝试一下

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;
    })
}

答案 1 :(得分:2)

您可以使用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);

答案 2 :(得分:1)

如果大于或等于提供的sortOrder,则可以将当前的对象数组映射到新的对象数组,并且每个sortOrder都会递增。然后,您可以使用id在数组中找到id等于提供的.find()的对象,以便将其sortOrder更改为提供的{{1 }}。最后,您可以使用新数组:

sortOrder