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