为什么打字稿数组中的一个对象值更改而没有分配值?

时间:2018-11-03 21:06:17

标签: arrays typescript

我尝试了大约十二种不同的方式来问这个问题,这些方法确实可以准确地描述我的问题,但是无法通过“考虑使用标题来更准确地描述您的问题”检查器。也许有人可以帮我重新命名吗?

无论如何,我在打字稿中有一个方法可以操纵“ 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语句,以便您可以看到值的轨迹。问题似乎在顶部。

enter image description here

在控制台中: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”。

enter image description here

0 个答案:

没有答案