仅使用包含特定值的元素从现有数组创建新数组

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     }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我一定做错了什么,因为新数组中的很多元素都是null\xe2\x80\xa6

\n\n

新数组看起来像这样:

\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"}]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我究竟做错了什么?我怎样才能实现我的目标?

\n\n

预先感谢各位!

\n

T.J*_*der 5

这些元素不会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循环就可以了。