首页 > 解决方案 > 为什么打字稿数组中的一个对象值在没有赋值的情况下发生变化?

问题描述

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

无论如何,我在打字稿中有一个方法可以操作“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。我不明白的是,在第一个控制台日志中,您可以看到第一个和第二个 WorkItem 的位置值为 1 和 1 ( console.log(items)),但您可以看到第二个 WorkItem 对象中的值从 1 变为 2 (请参阅第 3 条和第 5 条 console.log 语句 - console.log(items[j]))。

我看不到我将值 2 分配给它的位置,所以肯定发生了其他事情,但我看不到它。我不确定 position 是否是某种保留字,但 IntellJ 中的 linting 并没有发现它。

编辑- 我意识到那里有所有的 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 建议的

另请注意,我将“位置”更改为“位置”,因为位置可能是某种保留字。

在此处输入图像描述

标签: arraystypescript

解决方案


推荐阅读