这是我的阵列:
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha"}
];
从上面,我想得到一个这样的数组:
var propertyName = ["name", "esteira", "horse"];
该数组包含对象数组中对象的所有属性名称。我试过了Form array of property names found in a JavaScript Object但结果是:
['0', '1']
答案 0 :(得分:4)
您可以使用Array#forEach
迭代数组,并使用Object.keys
获取密钥并收集对象中的名称。然后取得钥匙。
var testeArray = [{name: "Jovem1", esteira: "Macaco"}, {name: "Jovem", esteira: "Doido", horse: "Chimbinha" }],
names = Object.create(null),
result;
testeArray.forEach(function (o) {
Object.keys(o).forEach(function (k) {
names[k] = true;
});
});
result = Object.keys(names);
console.log(result);

ES6与Set
和spread syntax ...
var array = [{name: "Jovem1", esteira: "Macaco"}, {name: "Jovem", esteira: "Doido", horse: "Chimbinha" }],
names = [...array.reduce((s, o) => (Object.keys(o).forEach(k => s.add(k)), s), new Set)];
console.log(names);

答案 1 :(得分:3)
您可以非常简单地执行以下操作;我认为到目前为止它可能是效率最高的代码。
var testArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha"}
],
props = Object.keys(testArray.reduce((o,c) => Object.assign(o,c)));
console.log(props);

答案 2 :(得分:1)
var testArray = [{
name: "Jovem1",
esteira: "Macaco"
}, {
name: "Jovem",
esteira: "Doido",
horse: "Chimbinha"
}];
var propName = [];
testArray.forEach(function(o) {
Object.keys(o).forEach(function(prop) {
if (propName.indexOf(prop) < 0)
propName.push(prop);
});
});
console.log(propName);
答案 3 :(得分:1)
首先使用Object.keys
从数组中获取所有属性,然后过滤掉以获取不同的属性
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha" }
]
var properties = [];
testeArray.forEach(function (o) {
Object.keys(o).forEach(function (k) {
properties.push(k)
});
});
var distProps = properties.filter(function(item, i, arr) {
return arr.indexOf(item) === i;
})
console.log(distProps);
答案 4 :(得分:0)
您可以尝试这样的事情:
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha" }
];
// The array in which we push the unique property names.
var properties = [];
testeArray.forEach(function(obj){
for(var key in obj){
if(obj.hasOwnProperty(key)
&& properties.indexOf(key) === -1) {
// It's the first time we hit key. So push it to the array.
properties.push(key);
}
}
});
console.log(properties);
答案 5 :(得分:0)
Array.prototyp.reduce()
和Object.keys()
函数的Ecmascript5 解决方案:
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha" }
],
keys = testeArray.reduce(function(r, o) {
Object.keys(o).forEach(function (k) {
if (r.indexOf(k) === -1) r.push(k);
})
return r;
}, []);
console.log(keys);
使用
Set
个对象和Array.from
函数的Ecmascript6 解决方案:
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha" }
],
keys = testeArray.reduce(function(r, o) {
var newSet = new Set(Object.keys(o));
return new Set([...r, ...newSet]);
}, new Set());
console.log(Array.from(keys));
[...r, ...newSet]
中的 new Set([...r, ...newSet])
表示r
和newSet
转换为数组并连接。
答案 6 :(得分:0)
function collectProperties(arrayOfObjects) {
return arrayOfObjects.reduce(function(memo, object) {
Object.keys(object).forEach(function(key) {
if (memo.indexOf(key) === -1) { memo.push(key) };
});
return memo;
}, []);
}
var testArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha"}
];
console.log(collectProperties(testArray));
&#13;
因此collectProperties(testeArray)
会返回['name', 'esteira', 'horse']
。
或者在CoffeeScript中:
collectProperties = (arrayOfObjects) ->
properties = []
for object in arrayOfObjects
for own property of object when property not in properties
properties.push(property)
properties
testArray = [
{name: "Jovem1", esteira: "Macaco"}
{name: "Jovem", esteira: "Doido", horse: "Chimbinha"}
]
console.log(collectProperties(testArray))
答案 7 :(得分:0)
使用ES6,您可以使用Set
并传播语法...
来执行此操作。
var testeArray = [
{name: "Jovem1", esteira: "Macaco"},
{name: "Jovem", esteira: "Doido", horse: "Chimbinha" }
];
var result = [...new Set([].concat(...testeArray.map(e => Object.keys(e))))]
console.log(result)
&#13;