无法从javascript中的数组获取/获取密钥

无法从javascript中的数组获取/获取密钥,javascript,Javascript,我有一个数组对象,其中有键值对。我正在尝试使用循环获取该数组中的键,但只得到0。我的代码有什么问题 var strj = '{"name":"John","age":"30","cars": [ {"type":"car", "year":"1998"}, {"type":"van", "year":"1995"}]}';

我有一个数组对象,其中有键值对。我正在尝试使用循环获取该数组中的键,但只得到
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)
环路


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

var care=[{type:“car”,年份:“1998”}];
对于(var密钥托管[0]){
if(关心[0].hasOwnProperty(键)){
console.log(键)
}
}

forEach
将逐个为您提供所有对象。所以您可以检查它们。

由于其他人已经解决了这个问题,我可以提出一个建议-Object.keys()为给定对象提供一个键数组。由于您得到的是过滤对象,只需要它的键,下面将实现这一点。请注意,这只是在过滤原始文件并获得“care”对象后才使用代码

另请注意,object.values()将为您提供给定对象中的值数组,object.entries()将为您提供键/值配对数组

var care={type:“car”,年份:“1998”};
var keys=Object.keys(care)

console.log(keys)//给出[“type”,“year”]
实际上,代码中根本没有问题。但您只是误解了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
  • Javascript
    filter()
    method=>
  • Javascript
    find()
    =>
  • Javascript
    findIndex()
    method=>
  • 方法返回一个匹配数组

    var care = myobj.cars.filter(c => c.type=='car'); // So, this returns an array.
    
    care.forEach(element => {
        console.log(Object.keys(element)); //Prints keys of each element
    });
    

    这是一个数组,您需要执行
    care[0]
    否则键将是索引,这就是为什么输出是
    0
    您进行了筛选,并要求函数仅返回类型
    car
    ,您只有一个。护理的价值与预期一样。由于
    care
    是一个规则数组,它的键实际上是,0,1,2,3,4..,或者如果它们只需要一个对象而不需要数组
    myobj.cars.find(c=>c.type=='car')
    会更好
    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
    
    var care = myobj.cars.filter(c => c.type=='car'); // So, this returns an array.
    
    care.forEach(element => {
        console.log(Object.keys(element)); //Prints keys of each element
    });