gpt4 book ai didi

javascript - 按屏幕参数排序的文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:12:34 24 4
gpt4 key购买 nike

我有一个数组文件[{screen:[1], order:1},{screen:[2], order: 2},{screen:[1, 2], order: 3}]。

每个文件可以有屏幕 - [1]、[2]、[1, 2]、[2,3] 和 [1,2,3]

根据屏幕,每个文件都有一个顺序。

例子:

  1. 添加 file1 与屏幕 [1] 和订单 1
  2. 添加 file2 与屏幕 [2] 和订单 1
  3. 添加 file3 与屏幕 [2] 和订单 2
  4. 将文件 4 添加到屏幕 [1, 2] 和顺序 3,为什么是 3 - 因为在屏幕 1 上我们有顺序 1,在屏幕 2 上我们有 1 和 2,我们得到第一个屏幕顺序和第二个屏幕顺序的最大值它是 2 加 1。但是我们可以从 1、2 或 3 中为屏幕 [1, 2] 选择 file4 的顺序如果我选择 3 - 没关系如果我选择 2 - file3 和屏幕 [2] 并且订单需要将订单更改为 3如果我选择 1 - file1 需要更改顺序为 2,file2 顺序 - 2,file3 顺序 - 3。

我的代码没问题。但是在这个例子中我有问题

  1. 添加 file1 与屏幕 [1, 2] 和订单 1
  2. 添加 file2 与屏幕 [2] 和订单 2
  3. 现在,当我想在屏幕 [1] 中添加文件 3 并将命令 1 文件 1 更改为 2,但需要更改命令为 3 的文件 2 保持为 2。

我尝试在循环中做一些循环 =) 但我很困惑

let tempFiles = files; // all files Array of objects
screen.forEach(s => { //screen - last added file's screen [1,2]
tempFiles = tempFiles.map(file => {
if(file.screen.indexOf(s) !== -1) {
let order = file.order;
if(file.order >= orderTemp) { //orderTemp - last added file's order
file.screen.forEach(scr => {
if(scr === s) {
order++;
}
else {
tempFiles.map(f => {
if(f.screen.indexOf(scr) !== -1){
let ord = f.order;
if(f.order >= order){
ord++;
}
return {...f, ord};
}
return f;
})
}
})
}
return {...file, order}
}
return file;
})
})

输入:

files = [{screens:[1, 2], order: 1}, {screens: [2], order: 2}];
screen = [1];
orderTemp = 1;

输出:

files [{screens: [1, 2]}, order: 2, {screens: [2], order: 3}];

在此代码的输出中,我需要以正确的顺序更改所有更改的文件。

最佳答案

哦,我找到了一个很好的解决方案。我用递归来做。这是我的代码:

const ordering = (screen, files, tempOrder) => {
files.forEach((file, i) => {
if (file.screen.indexOf(screen) !== -1) {
let o = file.order;
if (file.order === tempOrder) {
o++;
file.screen.forEach(scr => {
ordering(scr, files, o)
});
}
let arr = order[`order${screen}`];
arr.push(o);
setOrder({ ...order, [`order${screen}`]: [...arr] });
files[i] = { ...file, order: o };
}
});
};

screen.forEach(s => {
ordering(s, tempFiles, orderTemp);
});

关于javascript - 按屏幕参数排序的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com