2016-12-22 5 views
1

У меня есть список объектов, например, так:Получить все возможные ключи объекта из списка объектов Javascript/Машинопись

[ 
    { item1: "1", item2: "2" }, 
    { item1: "3", item2: "4", item3: "5" }, 
    { item1: "6" }, 
    { item1: "7", item2: "8", item3: "9", item4: "10" }, 
] 

Мне нужно, чтобы иметь возможность получить список всех возможных ключей:

["item1", "item2", "item3", "item4" ] 

Я пробовал использовать Object.Keys, но для этого требуется указать конкретный объект, проблема в том, что список выполнен динамически, поэтому ключи и значения неизвестны мной.

+0

Прежде чем заполнить массив со всеми ключами. Во-вторых, вы отфильтровываете ключи, чтобы сохранить уникальные ключи –

ответ

1

Вы можете использовать метод Array#reduce с Object.keys методом.

var data = [{ 
 
    item1: "1", 
 
    item2: "2" 
 
}, { 
 
    item1: "3", 
 
    item2: "4", 
 
    item3: "5" 
 
}, { 
 
    item1: "6" 
 
}, { 
 
    item1: "7", 
 
    item2: "8", 
 
    item3: "9", 
 
    item4: "10" 
 
}, ]; 
 

 
var res = data.reduce(function(arr, o) { 
 
    return Object.keys(o).reduce(function(a, k) { 
 
    if (a.indexOf(k) == -1) a.push(k); 
 
    return a; 
 
    }, arr) 
 
}, []); 
 

 
console.log(res);

1

var obj=[ 
 
    { item1: "1", item2: "2" }, 
 
    { item1: "3", item2: "4", item3: "5" }, 
 
    { item1: "6" }, 
 
    { item1: "7", item2: "8", item3: "9", item4: "10" }, 
 
], 
 
    keys=[]; 
 
    obj.forEach(function(element){ 
 
    for (var key in element) { 
 
     if(keys.indexOf(key)===-1){ 
 
      keys.push(key); 
 
     } 
 
    } 
 
    }); 
 
    console.log(keys);

1

Вы можете использовать Set для сбора ключей.

var obj = [{ item1: "1", item2: "2" }, { item1: "3", item2: "4", item3: "5" }, { item1: "6" }, { item1: "7", item2: "8", item3: "9", item4: "10" }], 
 
    items = obj.reduce((s, o) => [...new Set([...s, ...Object.keys(o)])], []); 
 

 
console.log(items);

1

вы должны перебрать список и получить массив ключей, когда, если вы найдете более длинный элемент, чем текущий

var obj=[ 
    { item1: "1", item2: "2" }, 
    { item1: "3", item2: "4", item3: "5" }, 
    { item1: "6" }, 
    { item1: "7", item2: "8", item3: "9", item4: "10" }, 
] 
var maxLength = 0; 
var keys = []; 
for (var i = yourArray.length - 1; i >= 0; i--) { 
    if(Object.keys(obj[i]).length > maxLength){ 
     maxLength = Object.keys(obj[i]).length; 
     keys = Object.keys(obj[i]) 
    } 

} 
Смежные вопросы