arrays - 为什么打字稿数组中的一个对象值在没有赋值的情况下发生变化?
问题描述
我已经尝试了十几种不同的方式来提出这个问题,这确实准确地描述了我的问题,但无法通过“考虑使用更准确地描述您的问题的标题”检查器。也许有人可以帮我重命名这个?
无论如何,我在打字稿中有一个方法可以操作“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 建议的
另请注意,我将“位置”更改为“位置”,因为位置可能是某种保留字。
解决方案
推荐阅读
- swift - How to put a checkmark after search
- rest - 拒绝不支持的 API 客户端时的 HTTP 状态代码
- date - AttributeError:模块“QuantLib”没有属性“日期”
- vue.js - vue,svg onmove 拖动无法与 ViewBox 一起正常工作
- laravel - 如何在 Laravel 5 中将图像从数据库显示到刀片
- angular - 在没有 OAuth2 的情况下刷新 JWT
- python - 如何将 Python 列表中 datetime 中的日期增加一天?
- angular - *ngFor 指令在增加索引时迭代相同的参数
- ios - 返回默认 UICollectionViewCell 缺少重用标识符
- android - 从根项目在 gradle 子项目中设置 android 版本代码/名称