将对象推入对象数组 - Typescript

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43151527/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 04:24:34  来源:igfitidea点击:

Pushing objects into Object Array - Typescript

javascriptangulartypescript

提问by Bromox

Having trouble with some code here. Building an application but stumbling over how to work with array objects. I provided the code above NgInit{}. And provided the TS error I am getting in Xcode.

这里有一些代码有问题。正在构建一个应用程序,但在如何使用数组对象方面遇到了困难。我提供了上面 NgInit{} 的代码。并提供了我在 Xcode 中遇到的 TS 错误。

Full component

完整组件

import { Component, OnInit } from '@angular/core';
import { Ticker } from '../TickerType'; 
import { ConversionService } from '../Conversion.service';
import {Observable} from 'rxjs/Rx';
import {resultsType} from './resultsTypeInterface';
@Component({
  selector: 'app-contents',
  templateUrl: './contents.component.html',
  styleUrls: ['./contents.component.scss']
})
export class ContentsComponent implements OnInit{

//Will hold the data from the JSON file


  // Variables for front end
 cryptoSelected : boolean = false;
 regSelected : boolean = false;
 step2AOptions : any[] = [
      {name: "make a selection..."},
      {name: "Bitcoin"},
      {name: "DASH"},
      {name: "Etherium"}  
    ]; // step2AOptions
 step2BOptions : any[] = [
      {name: "make a selection..."},
      {name: "CAD"},
      {name: "USD"} 
    ]; // step2BOptions
 step2Selection: string;
 holdings: number = 10;

coins: any[] = ["BTC_ETH", "BTC_DASH"];
ticker: Ticker[];
coinResults: resultsType[] =[]; 
currencyExchange:any[] = [];   

  constructor( private conversionService: ConversionService ) { 

  }

Error

错误

Argument of type '{ name: string; amount: any; }[]' is not assignable to parameter of type 'resultsType'.
  Property 'name' is missing in type '{ name: string; amount: any; }[]'.

This is happening in the code below. What I am trying to do is push this objects into an Object Array so I can access properties of like.

这发生在下面的代码中。我想要做的是将此对象推送到对象数组中,以便我可以访问类似的属性。

console.log(coinsResults[0].name);

Code

代码

ngOnInit(){
  this.conversionService.getFullTicker().subscribe((res) => {this.ticker = res;

  for(var j = 0; j<= this.coins.length-1; j++)
  {
    var currencyName: string = this.coins[j];
    if(this.ticker[currencyName])
    {
      var temp = [{name: currencyName, amount: this.ticker[currencyName].last} ]
      this.coinResults.push(temp)
    }
  }//end the for loop
  }); //end the subscribe function                                                       
 this.conversionService.getFullCurrencyExchange().subscribe( (res) => {this.currencyExchange = res["rates"]
  });
  console.log(this.coinResults);
}// End OnInit

回答by weirdan

coinResultsis declared as an array of resultsType, so it's pushmethod would only accept arguments of resultsTypetype. However, you're trying to push an arrayof resultsTypeto coinResults(note the square brackets):

coinResults被声明为一个数组resultsType,所以它的push方法只接受resultsType类型的参数。但是,你要推一个数组resultsTypecoinResults(注意括号):

// temp is resultsType[]
var temp = [{name: currencyName, amount: this.ticker[currencyName].last} ]
// but coinResults.push() accept only resultsType
this.coinResults.push(temp)

Loose the square brackets around the object literal in var temp=...line.

var temp=...一行中松开对象文字周围的方括号。

回答by holi-java

you can't pass an array to Array.push(array)since Array.push signature defined as reset parameters push(...items: T[]), use Array.push(item) instead.

Array.push(array)由于 Array.push 签名定义为重置参数push(...items: T[]),因此您无法将数组传递给它,请改用 Array.push(item) 。

var temp = {name: currencyName, amount: this.ticker[currencyName].last}; 
this.coinResults.push(temp);

OR using spread operator:...

或使用扩展运算符:...

var temp = [{name: currencyName, amount: this.ticker[currencyName].last} ];
this.coinResults.push(...temp);