这可能是一个简单的解决方案,但我不知道是否可以使用此方法。之前以不同的方式提出了这个问题,但是我正在研究对象方法而不是函数,所以请耐心等待。
是否可以访问对象属性并通过Object.getOwnPropertyNames(object)
将它们作为数组返回?
例如,此方法可以在没有数组的情况下使用下面的变量。
var y = {
firstName: "John",
lastName: "Doe",
eyeColor: "Black",
age: 50
};
console.log(
Object.getOwnPropertyNames(y)
);
Returns
(4) ["firstName", "lastName", "eyeColor", "age"]
我们可以使用相同的方法访问数组内部的对象属性吗?
var x = [{
firstName: "John",
lastName: "Doe",
eyeColor: "Black",
age: 50
}, {
firstName: "Marry",
lastName: "Smith",
eyeColor: "Brown",
age: 45
}];
答案 0 :(得分:1)
您可以为此使用spread operator ...:
var x = [{
firstName: "John",
lastName: "Doe",
eyeColor: "Black",
age: 50
}, {
firstName: "Marry",
lastName: "Smith",
eyeColor: "Brown",
age: 45
}];
console.log(
Object.getOwnPropertyNames(...x)
);
答案 1 :(得分:0)
这行不通,但是根据您所需的输出结构,您可以使用map
转换每个数组元素
x.map(Object.getOwnPropertyNames)
将返回属性名称数组的数组。
答案 2 :(得分:0)
var x = [{firstName: "John", lastName : "Doe", eyeColor : "Black", age : 50}, {firstName: "Marry", lastName : "Smith", eyeColor : "Brown", age : 45}];
x.map(y => console.log(Object.getOwnPropertyNames(y)))
您可以使用map()访问数组中的对象。
答案 3 :(得分:0)
var propNames = Object.getOwnPropertyNames(x[0]);
x[0]
是数组中的第一个对象,并且由于所有对象似乎都具有相同的键,因此在第一个对象上调用该函数将获得所需的结果。
注意::该解决方案假定数组中至少有一个对象,因此您可能需要先进行检查,然后再进行x[0]
,否则会出现错误。 / p>
示例:
var x = [{firstName: "John", lastName : "Doe", eyeColor : "Black", age : 50}, {firstName: "Marry", lastName : "Smith", eyeColor : "Brown", age : 45}];
var propNames = Object.getOwnPropertyNames(x[0]);
console.log(propNames);
答案 4 :(得分:0)
如果对象数组包含具有不同属性的对象,则可以这样获得唯一属性名称的列表:
var x = [{
firstName: "John",
lastName: "Doe",
eyeColor: "Black"
}, {
firstName: "Marry",
lastName: "Smith",
age: 45
}];
var arrayOfArrays = x.filter(obj => obj).map(Object.getOwnPropertyNames)
var array = [].concat.apply([], arrayOfArrays);
var uniqueProperties = [...new Set(array)]
console.log(uniqueProperties);
如果数组为空,或者数组包含null或未定义,则不会崩溃。但是它确实假设x是一个数组,可以是空或其他。