我遇到的问题是,两个相同类型的相同值在Typescript / Javascript中不相等。 我想做什么:我从JSON获取数据,我想通过id-attributes将一些数据与此JSON的其他数据连接起来。 id永远不会匹配。
我最后附上了我的文件。 问题在于getStationNameById(): 即使“id”为2而“station.id”为2,它们也不等于。它们甚至不等于“== 2”。我完全不知道问题是什么。由于我的调试输出,两个值都是数字..但结果总是错误。
my component.ts
import {Component, OnInit} from '@angular/core';
import {DataService} from "../../services/data.service";
@Component({
selector: 'alle-stationen-view',
templateUrl: './src/html/alle-verbindungen-view.component.html',
styleUrls: [ './src/css/views-general.css', './src/css/alle-verbindungen-view.component.css']
})
export class AlleVerbindungenViewComponent implements OnInit {
private connections: any[];
private stations : any[];
constructor(private dataService : DataService) {};
ngOnInit(): void {
this.dataService.getData().subscribe(
data => this.dataHandler(data)
);
}
private dataHandler(data) {
let connections = data.connections || {};
let stations = data.stations || {};
this.stations = stations;
connections.forEach(function(connection) {
// TO DO: DOESNT WORK!
connection.fromStation = this.getStationNameById(connection.fromStationId);
connection.toStation = this.getStationNameById(connection.toStationId);
}, this);
this.connections = connections;
}
private getStationNameById(id : number) {
console.debug("---");
this.stations.forEach(function(station) {
// both have Constructor "Number"
console.debug("id.type="+id.constructor+", station.id.type="+station.id.constructor);
console.debug("id="+id+", station.id="+station.id);
console.debug("station.id==id : "+station.id == id)+""; // ALWAYS FALSE
console.debug("station.id===id: "+station.id === id+""); // ALWAYS FALSE
console.debug("id == 2:" +id==2); // ALWAYS FALSE
console.debug("station.id == 2:" +station.id==2); // ALWAYS FALSE
if (station.id === id) {
return station.name;
}
});
return "";
}
}
data.json
{
"data": {
"stations": [
{
"id": 1,
"name": "Hamburg Mitte"
},
{
"id": 2,
"name": "Hamburg Ost"
},
{
"id": 3,
"name": "Hamburg Hauptbahnhof"
}
],
"connections": [
{
"id": 1,
"fromStationId": 1,
"toStationId": 2,
"duration": 7
},
{
"id": 2,
"fromStationId": 2,
"toStationId": 1,
"duration": 7
},
{
"id": 3,
"fromStationId": 1,
"toStationId": 3,
"duration": 2
},
{
"id": 4,
"fromStationId": 3,
"toStationId": 1,
"duration": 2
},
{
"id": 5,
"fromStationId": 2,
"toStationId": 3,
"duration": 10
},
{
"id": 6,
"fromStationId": 2,
"toStationId": 2,
"duration": 10
}
]
}
}
控制台输出
id.type=function Number() { [native code] }, station.id.type=function Number() { [native code] }
alle-verbindungen-view.component.ts:39 id=1, station.id=1
alle-verbindungen-view.component.ts:40 false
alle-verbindungen-view.component.ts:41 false
alle-verbindungen-view.component.ts:42 false
alle-verbindungen-view.component.ts:43 false
alle-verbindungen-view.component.ts:38 id.type=function Number() { [native code] }, station.id.type=function Number() { [native code] }
alle-verbindungen-view.component.ts:39 id=1, station.id=2
alle-verbindungen-view.component.ts:40 false
alle-verbindungen-view.component.ts:41 false
alle-verbindungen-view.component.ts:42 false
alle-verbindungen-view.component.ts:43 false
alle-verbindungen-view.component.ts:38 id.type=function Number() { [native code] }, station.id.type=function Number() { [native code] }
alle-verbindungen-view.component.ts:39 id=1, station.id=3
alle-verbindungen-view.component.ts:40 false
alle-verbindungen-view.component.ts:41 false
alle-verbindungen-view.component.ts:42 false
alle-verbindungen-view.component.ts:43 false
alle-verbindungen-view.component.ts:35 ---
答案 0 :(得分:4)
你这样做是错误的。
在您的代码中,您使用console.debug("id == 2:" +id==2);
比较“id == 2”== 2表示您将字符串与2进行比较。
例如,试试这个console.debug("id == 2:" +2==2);
你会得到错误的,因为你实际上是在比较"id == 2:2" == 2
,这总是会给你错误。
如果您需要更多解释,请与我们联系。
编辑:
在此声明中,我们使用两个运算符+
和==
,+
的优先级高于==
。首先+
执行==
执行。
答案 1 :(得分:0)
我找到了解决方案。由于我错误地调试输出,我在错误的位置搜索了该错误。在我使用括号后,我收到了真实的结果。我认为forEach函数的返回影响了整个方法,而不仅仅是这个块。因此该方法一直返回“”。这现在有效:
let customRedColor = UIColor( red: 255, green: 0, blue: 13, alpha: 1 )
self.navigationController?.navigationBar.barTintColor = customRedColor