Unk*_*ser 4 javascript arrays key-value
我从现有数组创建一个新数组(包含 100.000 个对象的大数组)创建一个新数组。在新数组中,我只想要“城市”值为例如纽约市的元素。
\n\n var newData = [];\n\n for (var i = 0; i < data.length; i++) {\n\n if(data[i].city === "New York City") {\n\n newData[i] = {"city": data[i].city, "longitude": \n data[i].longitude, "latitude": data[i].latitude, "state": \n data[i].state};\n\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我一定做错了什么,因为新数组中的很多元素都是null\xe2\x80\xa6
新数组看起来像这样:
\n\n[null,null,null,null,null, {"city":"New York", "logitude": \n-73.935242, "latitude": 40.730610, "state": "NY"},\nnull,null,null,null,null,null,"city":"New York", "logitude": \n-73.935242, "latitude": 40.730610, "state": "NY"}]\nRun Code Online (Sandbox Code Playgroud)\n\n我究竟做错了什么?我怎样才能实现我的目标?
\n\n预先感谢各位!
\n这些元素不会null,它们会丢失undefined(当您尝试访问它们时会显示)。原因是你i每次都会增加,即使你跳过一个条目。
要修复它,请push改用:
var newData = [];
for (var i = 0; i < data.length; i++) {
if (data[i].city === "New York City") {
newData.push({
"city": data[i].city,
"longitude": data[i].longitude,
"latitude": data[i].latitude,
"state": data[i].state
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望两个数组共享对象,您可以使用filter:
var newData = data.filter(function(entry) {
return entry.city === "New York City";
});
Run Code Online (Sandbox Code Playgroud)
但如果您希望新数组具有与原始数组不同的新对象,那么您的for循环就可以了。