как построить метки из ключа объекта - PullRequest
0 голосов
/ 15 октября 2018

У меня есть модель, которая возвращает объект, подобный этому:

{type:"Fiat", model:"500", color:"white"}
{type:"ford", model:"f250", color:"green"}

Мне нужно создать метку из ключей объекта, например, типа, модели, цвета и столбца, который содержит fiat, 500 и т. Д. Iпытался использовать:

model.map(elem=>{ Object.keys(elem)}

, чтобы получить ключи, но я получаю ключи каждого элемента в объекте.Есть ли способ получить значение ключа?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы можете использовать

Array.prototype.map ()

Метод map() создает новый массив с результатами вызова предоставленногоФункция для каждого элемента в вызывающем массиве.

Object.keys ()

Метод Object.keys() возвращает массив данного объектаимена собственных свойств в том же порядке, что и в обычном цикле.

Array.prototype.reduce ()

Reduce () выполняет функцию редуктора (которую вы предоставляете) для каждого члена массива, в результате чего получается одно выходное значение.

Использование map(), Object.keys() и reduce():

const car = [{type:"Fiat", model:"500", color:"white"},
    {type:"ford", model:"f250", color:"green"}]

var res = car.map(item => {
  return Object.keys(item).reduce((a, c, i) => {
    a[`label${i+1}`] = item[c]
    return a;
  }, {});
});

console.log(res);

ИЛИ: для ... в

Оператор for ... inперебирает все не-символьные, перечисляемые свойства объекта.

Использование map(), Object.keys() и for...in:

const car = [{type:"Fiat", model:"500", color:"white"},
{type:"ford", model:"f250", color:"green"}]

var res = car.map(elem => { 
  var temp = {}, counter = 1;
  for(var k in elem){
    temp['label'+counter] = elem[k];
    counter++;
  }
  return temp;
});
console.log(res);
0 голосов
/ 15 октября 2018

вывод должен быть label1 = тип, label2 = модель, label3 = цвет

если вы хотите назвать их по метке + nth

, вы можете отобразитьваши машины затем строят объект, перебирая все ключи в объекте.

если я неправильно понял, пожалуйста, оставьте комментарий, и я был бы рад изменить.:)

const cars = [{
    type: "Fiat",
    model: "500",
    color: "white"
  },
  {
    type: "ford",
    model: "f250",
    color: "green"
  }
]


function getLabelsFromObject(model) {
  return Object.values(model).reduce(createLabelModel, {})
}

function createLabelModel(labels, label, i) {
  return Object.assign(labels, {[`label${i}`]: label})
}

console.log(cars.map(getLabelsFromObject))
0 голосов
/ 15 октября 2018

Object.keys получает ключи.Вы можете использовать клавиши, чтобы получить значения, такие как myObject[key]:

РЕДАКТИРОВАТЬ: Обновлено для получения желаемого результата:

const data = [
    {type:"Fiat", model:"500", color:"white"},
    {type:"ford", model:"f250", color:"green"}
]


const result = data.map(elem => {
    myKeys = Object.keys(elem)
    myResult = "";
    
    for (let x in myKeys) {
        myResult += "label" + (+x + 1) + "=" + myKeys[x] + ", ";
        // use elem[myKeys[x]] here to get the values (e.g. "Fiat", "500", "white")
    }
    return myResult;
})

console.log(result)
...