我需要编写一个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中处理此问题的最佳方法是什么
答案 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