在 Angular 7 中并排组合两个数组
Combining two arrays side by side in Angular 7
为了并排组合两个数组,我按照以下过程进行操作,但我得到了
Cannot set Property "account" of undefined.
这是我的代码
acs = [
{
"account": "Cash In Hand",
"liabilities": 0,
"assets": 8031597
},
{
"account": "Tax Acs",
"liabilities": 988363.72,
"assets": 0.98
},
{
"account": "Sundry Debtor",
"liabilities": 0,
"assets": 551
},
{
"account": "Sundry Creditor",
"liabilities": 0,
"assets": 0
}
];
acd: any;
acc: any;
newacc: any;
constructor() { }
ngOnInit() {
this.acd = this.acs.filter(f => f.liabilities !== 0);
this.acc = this.acs.filter(f => f.assets !== 0);
const bigger = this.acd.length > this.acc.length ? this.acd.length : this.acc.length;
this.newacc = [];
for (let i = 0; i < bigger; i++) {
if (this.acd.length > i) {
this.newacc[i].account = this.acd[i].account;
this.newacc[i].liabilities = this.acd[i].liabilities;
}
if (this.acc.length > i) {
this.newacc[i].accounts = this.acc[i].account;
this.newacc[i].assets = this.acc[i].assets;
}
}
}
如果我这样添加 this.newacc = [{}];
我会得到与第二个 if
相同的错误,即 this.newacc[i].accounts
我在这里做错了什么?或者有没有最简单的方法可以并排组合两个数组?这两个数组在数组长度上是独立的,不带任何连接。
你应该使用push
方法。问题是您使用 C++
语法添加元素,例如。
this.newacc[i].account = this.acd[i].account;
正如我前面提到的,您可以通过将所需的 object 作为参数传递来使用 push
方法。
newacc.push({account:acd[i].account, liabilities : acd[i].liabilities });
acs = [ { "account": "Cash In Hand", "liabilities": 0, "assets": 8031597 }, { "account": "Tax Acs", "liabilities": 988363.72, "assets": 0.98 }, { "account": "Sundry Debtor", "liabilities": 0, "assets": 551 }, { "account": "Sundry Creditor", "liabilities": 0, "assets": 0 } ];
acd = acs.filter(f => f.liabilities !== 0);
acc = acs.filter(f => f.assets !== 0);
const bigger = acd.length > acc.length ? acd.length : acc.length, newacc = [];
for (let i = 0; i < bigger; i++) {
if (acd.length > i)
newacc.push({account:acd[i].account, liabilities : acd[i].liabilities });
if (acc.length > i)
newacc.push({account:acc[i].account, assets : acc[i].assets });
}
console.log(newacc);
您的问题纯粹是 Typescript
问题,没有任何 angular 的问题。
这是对您的部分代码的修复,其余部分我想您可以弄清楚:
interface accnt {
account: string;
liabilities: number;
assets: number;
}
let acs = [
{
"account": "Cash In Hand",
"liabilities": 0,
"assets": 8031597
},
{
"account": "Tax Acs",
"liabilities": 988363.72,
"assets": 0.98
},
{
"account": "Sundry Debtor",
"liabilities": 0,
"assets": 551
},
{
"account": "Sundry Creditor",
"liabilities": 0,
"assets": 0
}
];
let acd: accnt[] = new Array(4);
let acc: accnt[] = new Array(4);
let newacc: accnt[] = new Array(4);
this.acd = this.acs.filter(f => f.liabilities !== 0);
this.acc = this.acs.filter(f => f.assets !== 0);
alert(JSON.stringify(this.acd));
alert(JSON.stringify(this.acc));
alert(JSON.stringify(this.newacc));
const bigger = this.acd.length > this.acc.length ? this.acd.length : this.acc.length;
for (let i = 0; i < bigger; i++) {
if (this.acd.length > i) {
this.newacc[i] =
{
account: this.acd[i].account,
liabilities: this.acd[i].liabilities
}
}
/*if (this.acc.length > i) {
this.newacc[i].accounts = this.acc[i].account;
this.newacc[i].assets = this.acc[i].assets;
}*/
}
alert(JSON.stringify(this.newacc));
为了并排组合两个数组,我按照以下过程进行操作,但我得到了
Cannot set Property "account" of undefined.
这是我的代码
acs = [
{
"account": "Cash In Hand",
"liabilities": 0,
"assets": 8031597
},
{
"account": "Tax Acs",
"liabilities": 988363.72,
"assets": 0.98
},
{
"account": "Sundry Debtor",
"liabilities": 0,
"assets": 551
},
{
"account": "Sundry Creditor",
"liabilities": 0,
"assets": 0
}
];
acd: any;
acc: any;
newacc: any;
constructor() { }
ngOnInit() {
this.acd = this.acs.filter(f => f.liabilities !== 0);
this.acc = this.acs.filter(f => f.assets !== 0);
const bigger = this.acd.length > this.acc.length ? this.acd.length : this.acc.length;
this.newacc = [];
for (let i = 0; i < bigger; i++) {
if (this.acd.length > i) {
this.newacc[i].account = this.acd[i].account;
this.newacc[i].liabilities = this.acd[i].liabilities;
}
if (this.acc.length > i) {
this.newacc[i].accounts = this.acc[i].account;
this.newacc[i].assets = this.acc[i].assets;
}
}
}
如果我这样添加 this.newacc = [{}];
我会得到与第二个 if
相同的错误,即 this.newacc[i].accounts
我在这里做错了什么?或者有没有最简单的方法可以并排组合两个数组?这两个数组在数组长度上是独立的,不带任何连接。
你应该使用push
方法。问题是您使用 C++
语法添加元素,例如。
this.newacc[i].account = this.acd[i].account;
正如我前面提到的,您可以通过将所需的 object 作为参数传递来使用 push
方法。
newacc.push({account:acd[i].account, liabilities : acd[i].liabilities });
acs = [ { "account": "Cash In Hand", "liabilities": 0, "assets": 8031597 }, { "account": "Tax Acs", "liabilities": 988363.72, "assets": 0.98 }, { "account": "Sundry Debtor", "liabilities": 0, "assets": 551 }, { "account": "Sundry Creditor", "liabilities": 0, "assets": 0 } ];
acd = acs.filter(f => f.liabilities !== 0);
acc = acs.filter(f => f.assets !== 0);
const bigger = acd.length > acc.length ? acd.length : acc.length, newacc = [];
for (let i = 0; i < bigger; i++) {
if (acd.length > i)
newacc.push({account:acd[i].account, liabilities : acd[i].liabilities });
if (acc.length > i)
newacc.push({account:acc[i].account, assets : acc[i].assets });
}
console.log(newacc);
您的问题纯粹是 Typescript
问题,没有任何 angular 的问题。
这是对您的部分代码的修复,其余部分我想您可以弄清楚:
interface accnt {
account: string;
liabilities: number;
assets: number;
}
let acs = [
{
"account": "Cash In Hand",
"liabilities": 0,
"assets": 8031597
},
{
"account": "Tax Acs",
"liabilities": 988363.72,
"assets": 0.98
},
{
"account": "Sundry Debtor",
"liabilities": 0,
"assets": 551
},
{
"account": "Sundry Creditor",
"liabilities": 0,
"assets": 0
}
];
let acd: accnt[] = new Array(4);
let acc: accnt[] = new Array(4);
let newacc: accnt[] = new Array(4);
this.acd = this.acs.filter(f => f.liabilities !== 0);
this.acc = this.acs.filter(f => f.assets !== 0);
alert(JSON.stringify(this.acd));
alert(JSON.stringify(this.acc));
alert(JSON.stringify(this.newacc));
const bigger = this.acd.length > this.acc.length ? this.acd.length : this.acc.length;
for (let i = 0; i < bigger; i++) {
if (this.acd.length > i) {
this.newacc[i] =
{
account: this.acd[i].account,
liabilities: this.acd[i].liabilities
}
}
/*if (this.acc.length > i) {
this.newacc[i].accounts = this.acc[i].account;
this.newacc[i].assets = this.acc[i].assets;
}*/
}
alert(JSON.stringify(this.newacc));