【问题标题】:Typescript Array restructure打字稿数组重组
【发布时间】:2017-04-28 09:02:12
【问题描述】:

我想重组我从 php 中检索到的数组,使其可用于我的 ngFor。

目前我的数组包含 ~2700 个元素,其中包含具有以下数据的对象:

name: "Someone"
shift: 3
week: 1
department_name: "somedepartment"

我想把它改成array->week->shift->department.name

在 JS 中这很容易,但在 Typescript 中我无法正常工作,我的实际代码如下所示:

test(data): void{
//data contains the actual array
let user = [];
for (let entry of data){
  console.log(entry['week']);
  console.log(entry['shift']);
  console.log(entry['department_name']);
  user[entry['week']][entry['shift']][entry['department_name']] = entry;
}
console.log(user);}

console.log 返回前 3 个值:1、3、“departmentx”

然后返回:

错误错误:未捕获(承诺中):TypeError:无法读取未定义的属性“3” TypeError:无法读取未定义的属性“3”

我之前读过我必须设置数组的大小,但每次都会有所不同,以后除了存储的名称之外还会有更多信息。

【问题讨论】:

  • AngularJS 还是 Angular?不能两者兼而有之。
  • “错误错误:未捕获(在承诺中):TypeError:无法读取未定义的属性 '3' TypeError:无法读取未定义的属性 '3'” 是运行时错误,而不是 TypeScript 错误。
  • Ty Angular 是正确的。对我来说,它是一个打字稿错误,导致相同的代码在 js 中工作。

标签: angular typescript multidimensional-array


【解决方案1】:

如果我理解得很好,您想更改数组中元素的顺序,对吧?

这应该可行:

    let newArray = [];
    for (let entry in data) {
        let currentObj = {
            [entry.week]: {
              [entry.shift]: entry.department_name
            }
        };
        newArray.push(currentObj);
    }
    console.log(JSON.stringify(newArray));

这个输出会是这样的:

   newArray = [
        1: {
            3: "somedepartmentX"
        },
        2: {
            4: "somedepartmentY",
        },
        3: {
            5: "somedepartmentZ",
        },
    ];

【讨论】:

  • Ty 这接近我想要的并且它有效。问题是我只需要它多维。这意味着必须像这样设置属性: let currentObj = {entry.week: {entry.shift: {entry.department: entry.name}}} //entry.shift, week 和 department 只包含新数组
  • @Doomenik 更新,我希望这更接近您的需要,或者至少是一个好的开始,这样您就可以实现您想要的。希望它有所帮助! ;)
  • 这正是我想要的,但它不起作用。在 currentObj 的声明中,它在入口处说。 “预期的 ':' ”。终端抛出的错误代码超过数百万:D 终端第一个错误:意外令牌.. 条目:.week 似乎 Typesript 将其翻译错误
  • 完美!我永远不会对此感到厌烦......只需要添加'[]' ty。现在我只需要摆脱 push 以便它结合 entry.week 和 entry.shift 级别的元素。目前我还有2700个元素。但是这个问题我会自己解决。您能否将 entry.shift 更改为 [entry.shift],然后我可以将您的答案标记为正确。
  • @Doomenik 改变了!杰出的!我真的很高兴它帮助了你。现在让我们继续编码! ;) 祝你好运! :)
猜你喜欢
  • 2023-03-16
  • 2013-04-20
  • 1970-01-01
  • 2022-11-19
  • 2022-11-25
  • 2017-09-22
  • 2018-06-01
  • 2018-08-06
  • 2020-06-04
相关资源
最近更新 更多