Javascript 订阅淘汰ObservalArray但显示空数组的数据

Javascript 订阅淘汰ObservalArray但显示空数组的数据,javascript,knockout.js,knockout-mvc,Javascript,Knockout.js,Knockout Mvc,我是javascript新手。我很难从Array位置打印数据。数据绑定可以工作,我可以在视图中的位置ObservableArray列出数据,但无法在控制台上打印出来。我已经用了好几个小时了,如果有任何帮助,我将不胜感激。多谢各位 这是ViewModel let MapViewModel = function() { let map let geocoder; let self = this; self.location = ko.observableArray([]); for (

我是javascript新手。我很难从Array位置打印数据。数据绑定可以工作,我可以在视图中的位置ObservableArray列出数据,但无法在控制台上打印出来。我已经用了好几个小时了,如果有任何帮助,我将不胜感激。多谢各位

这是ViewModel

    let MapViewModel = function() {

let map
let geocoder;
let self = this;

self.location = ko.observableArray([]);

for (let i = 0; i < locationList.length; ++i) {
  self.location.push(new Location(locationList[i]));
}

console.log(this.location()); // Location, Location, Location, Location, Location, Location, Location]
console.log(this.location()[0].name); //  Location {name: ƒ, address: ƒ} ...
console.log(this.location().length); //length is 7

}

let Location = function(data) {
this.name = ko.observable(data.name);
this.address = ko.observable(data.address);


}

  ko.applyBindings(new MapViewModel());

这可以将observable展开为常规js,并将其转换为单个字符串(如果需要),然后您可以在控制台中打印它:

let locationsJSON = ko.toJS(self.location);
let locationsString = JSON.stringify(locationsJSON);

locationList
看起来像什么?它是一个对象数组,其属性为名称和地址。谢谢你当你说你不能在控制台上打印时那是什么意思?这会给你一个错误吗?它的格式是否不正确?不,它不显示任何错误。当我尝试使用这行代码“console.log(self.Location()[0]);”打印ObservalArray中的第一个对象时,它会显示“Location{name:ƒ,address:ƒ}”。我不知道这是什么意思,我需要像这样的“地点{name:“New york”,address:“E98St”}。谢谢你刚刚试过,它成功了。非常感谢。请你指出我在代码中犯的错误,这样我将来就能知道如何处理类似的问题。谢谢没有错误。当你做
this.name=ko.observeable时(data.name);
它将data.name包装到函数(可观察)中,以向其添加附加功能(例如订户侦听器)。当您记录
console.log(this.location()[0].name);
时,它说name是函数,因为它实际上是一个函数(ko-observable)。若要展开单个可观察变量,可以在可观察变量名称后面使用括号,如
console.log(this.location()[0].name())如果有嵌套的,你需要使用
ko.toJS
ko.mapping.toJS
,它会将你所有的观察值转换成常规的json。哦,我的天啊!!再次感谢你,我一点都没想到。你刚刚帮我省去了很多压力。谢谢你much@FredBrume如果答案适用于你,考虑投票并标记为ANSW。呃。
  let locationList = [{
  name: 'Brooklyn Museum',
  address: '200 Eastern Pkwy, Brooklyn, NY 11238'
}, {
  name: 'Empire State Building',
  address: '350 5th Ave, New York, NY 10118'
}, {
  name: 'Statue of liberty',
  address: 'New York, NY 10004'
}, {
  name: 'Rockefeller Center',
  address: '45 Rockefeller Plaza, New York, NY 10111'
},
{
  name: 'Brooklyn Bridge',
  address: 'Brooklyn Bridge, New York, NY 10038'
},
{
  name: 'Time Square',
  address: '45 Rockefeller Plaza, New York, NY 10111'
},
{
  name: 'World Trade Center',
  address: '285 Fulton St, New York, NY 10007'
},
  ];
let locationsJSON = ko.toJS(self.location);
let locationsString = JSON.stringify(locationsJSON);