我尝试了大约十二种不同的方式来问这个问题,这些方法确实可以准确地描述我的问题,但是无法通过“考虑使用标题来更准确地描述您的问题”检查器。也许有人可以帮我重新命名吗?
无论如何,我在打字稿中有一个方法可以操纵“ WorkItem”对象数组中的“位置”值-方法如下:
static swapPositions(items: WorkItem[], i: number, j: number): WorkItem[] {
console.log(items);
console.log(items[i]);
console.log(items[j]);
console.log([i, j]);
if (items.length >= 2) {
console.log(items[i]);
console.log(items[j]);
console.log('i,j: ' + [items[i].position, items[j].position]);
if (items[i].position === items[j].position) {
if (items[i].position === 1) {
items[j].position = 1;
items[i].position = 2;
} else if (items[j].position === items.length) {
items[j].position = items[i].position - 1;
} else {
items[i].position = items[i].position + 1;
}
} else if (items[i].position < items[j].position) {
const i_orig_pos = items[i].position;
items[i].position = items[j].position;
items[j].position = i_orig_pos;
}
console.log('i,j: ' + [items[i].position, items[j].position]);
}
items = Utils.swapArrayElements(items, i, j);
console.log(items);
return items;
}
如您所见,我自由地提供了console.log语句,以便您可以看到值的轨迹。问题似乎在顶部。
在控制台中:i和j值分别为0和1。我不明白的是,在第一个控制台日志中,您可以看到第一个和第二个WorkItems的位置值为1和1(console.log(items)
),但是您可以看到第二个WorkItem对象的值发生了变化从1到2(请参阅第3和第5 console.log语句-console.log(items[j])
)。
我看不到将值2分配给的位置,因此必须进行其他操作,但看不到。我不确定位置是否是某种保留字,但是IntellJ中的棉绒布没有捡起它。
编辑-我意识到在其中包含所有console.log语句的情况下,代码有点不清楚,因此我在下面不使用所有这些控制台的情况下将其复制:
static swapPositions(items: WorkItem[], i: number, j: number): WorkItem[] {
if (items.length >= 2) {
if (items[i].position === items[j].position) {
if (items[i].position === 1) {
items[j].position = 1;
items[i].position = 2;
} else if (items[j].position === items.length) {
items[j].position = items[i].position - 1;
} else {
items[i].position = items[i].position + 1;
}
} else if (items[i].position < items[j].position) {
const i_orig_pos = items[i].position;
items[i].position = items[j].position;
items[j].position = i_orig_pos;
}
}
items = Utils.swapArrayElements(items, i, j);
return items;
}
有人知道发生了什么事吗?
编辑
这是相同代码的控制台输出,但每个对象周围都有JSON.stringify(xxx)
,如@jcalz所建议
还请注意,由于位置是某种保留字的可能性,我将“位置”更改为“ pos”。