无法从JavaScript中的数组获取/获取键

时间:2018-07-17 12:07:28

标签: javascript

我有一个数组对象,其中有键值对。我正在尝试使用循环来获取该数组中的键,但是我只得到了0。我的代码有什么问题。

 var strj = '{"name":"John","age":"30","cars":
                                          [ {"type":"car", "year":"1998"}, 
                                            {"type":"van", "year":"1995"}]}';
    var myobj = JSON.parse(strj)

var care = myobj.cars.filter(c => c.type=='car');

护理价值

0:{type: "car", year: "1998"}
length:1
__proto__:Array(0)

循环

for (var key in care){
    if(care.hasOwnProperty(key)){
        console.log(key)
    }
}

5 个答案:

答案 0 :(得分:3)

care是数组类型,因此您不能执行for (var key in care)。您需要执行for (var key in care[0])。这是因为for (var key in care)将在care中查找键值,并且由于它是一个数组,因此它将始终将0作为key中的值(因为您只有一个数组中的对象,其索引为0)。这就是为什么您在0中获得console.log的原因。

var care =[{type: "car", year: "1998"}];
for (var key in care[0]){
    if(care[0].hasOwnProperty(key)){
        console.log(key)
    }
}

答案 1 :(得分:1)

care.forEach( ( singleCar ) => {

    for ( var key in singleCar ){
        console.log(key);

        if( care.hasOwnProperty( key ) ){
            console.log(key);

        }
    }

})

forEach将为您提供所有对象。这样您就可以检查它们。

答案 2 :(得分:1)

其他人解决了这个问题后,我可以提个建议-Object.keys()给出给定对象的键数组。由于您正在获取已过滤的对象,并且只需要它的键-以下将实现此目的。请注意,这仅在过滤原始文件并获得“护理”对象之后才使用代码。

顺便说一句,请注意object.values()将为您提供给定对象中的值的数组,而object.entries()将为您提供键/值对的数组。

var care = {type: "car", year: "1998"};
var keys = Object.keys(care)
console.log(keys) // gives ["type","year"]

答案 3 :(得分:1)

filter()方法返回一个匹配数组。

URLEncoder.encode(message, "UTF-8" );

答案 4 :(得分:0)

实际上,您的代码根本没有问题。但是您只是误解了JavaScript过滤器的使用。 JavaScript filter()创建了一个新数组,这就是为什么将0设为key的原因。如果您只想获取一个匹配的元素,则应该使用find()

var strj = '{"name":"John","age":"30","cars":[{"type":"car", "year":"1998"},{"type":"van", "year":"1995"}]}';
var myobj = JSON.parse(strj)
var care = myobj.cars.filter(c => c.type == 'car'); // returns array
var care = myobj.cars.find(c => c.type == 'car'); // returns first matching object
var care = myobj.cars.findIndex(c => c.type == 'car'); // returns first matching index
  1. JavaScript filter()方法=> Read Here
  2. JavaScript find() => Read Here
  3. JavaScript findIndex()方法=> Read Here