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

标签 javascript arrays key-value

我从现有数组(包含 100.000 个对象的大数组) 创建了一个新数组。在新数组中,我只需要“城市”值为例如纽约市的元素。

    var newData = [];

    for (var i = 0; i < data.length; i++) {

        if(data[i].city === "New York City") {

            newData[i] = {"city": data[i].city, "longitude": 
            data[i].longitude, "latitude": data[i].latitude, "state": 
            data[i].state};

        }
     }

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

新数组看起来像这样:

[null,null,null,null,null, {"city":"New York", "logitude": 
-73.935242, "latitude": 40.730610, "state": "NY"},
null,null,null,null,null,null,"city":"New York", "logitude": 
-73.935242, "latitude": 40.730610, "state": "NY"}]

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

提前谢谢大家!

最佳答案

元素不会是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
        });
    }
}

如果您希望两个数组共享对象,您可以改用filter:

var newData = data.filter(function(entry) {
    return entry.city === "New York City";
});

但是如果您希望新数组包含与原始数组不同的新对象,您的for 循环就可以了。

关于javascript - 仅使用包含特定值的元素从现有数组创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44367124/

相关文章:

javascript - 使用 Angular JS 比较两个列表并删除公共(public)元素

PHP:数组到可变函数参数值

javascript - 一个对象如何从对象列表中分组并仅收集明确引用的特定值,每个值都通过其键?

ios - CTTelephonyNetworkInfo 在 iOS 12 上返回 nil

javascript - 如何在Vuejs中将按钮显示延迟到2秒

c++ - 通过 make_shared 用 shared_ptr 包装动态数组

javascript - NodeJS HttpGet 方法在 Wiki 上不起作用

python - 检查字典中键内的键

javascript - 如何在我的代码中使用 AJAX 和 JSON

javascript - 在带有 http 请求操作的按钮上显示指示器的 Angular 方式是什么?